patch 9.1.0903: potential overflow in spell_soundfold_wsal()

Commit: 
https://github.com/vim/vim/commit/39a94d20487794aeb722c21e84f8816e217f0cfe
Author: Zdenek Dohnal <zdoh...@redhat.com>
Date:   Wed Dec 4 20:16:17 2024 +0100

    patch 9.1.0903: potential overflow in spell_soundfold_wsal()
    
    Problem:  potential overflow in spell_soundfold_wsal()
    Solution: Protect wres from buffer overflow, by checking the
              length (Zdenek Dohnal)
    
    Error: OVERRUN (CWE-119):
    vim91/src/spell.c:3819: cond_const: Checking "reslen < 254" implies that
    "reslen" is 254 on the false branch.
    vim91/src/spell.c:3833: incr: Incrementing "reslen". The value of "reslen"
    is now 255.
    vim91/src/spell.c:3792: overrun-local: Overrunning array "wres" of 254
    4-byte elements at element index 254 (byte offset 1019) using index
    "reslen - 1" (which evaluates to 254).
     3789|                      {
     3790|                          // rule with '<' is used
     3791|->                        if (reslen > 0 && ws != NULL && *ws != NUL
     3792|                                  && (wres[reslen - 1] == c
     3793|                                                      || wres[reslen 
- 1] == *ws))
    
    Error: OVERRUN (CWE-119):
    vim91/src/spell.c:3819: cond_const: Checking "reslen < 254" implies that
    "reslen" is 254 on the false branch.
    vim91/src/spell.c:3833: overrun-local: Overrunning array "wres" of 254
    4-byte elements at element index 254 (byte offset 1019) using index
    "reslen++" (which evaluates to 254).
     3831|                         {
     3832|                             if (c != NUL)
     3833|->                               wres[reslen++] = c;
     3834|                             mch_memmove(word, word + i + 1,
     3835|                                        sizeof(int) * (wordlen -
    (i + 1) + 1));
    
    related: #16163
    
    Signed-off-by: Zdenek Dohnal <zdoh...@redhat.com>
    Signed-off-by: Christian Brabandt <c...@256bit.org>

diff --git a/src/spell.c b/src/spell.c
index 5a7720f7f..2581a5ede 100644
--- a/src/spell.c
+++ b/src/spell.c
@@ -3829,7 +3829,7 @@ spell_soundfold_wsal(slang_T *slang, char_u *inword, 
char_u *res)
                            c = *ws;
                        if (strstr((char *)s, "^^") != NULL)
                        {
-                           if (c != NUL)
+                           if (c != NUL && reslen < MAXWLEN)
                                wres[reslen++] = c;
                            mch_memmove(word, word + i + 1,
                                       sizeof(int) * (wordlen - (i + 1) + 1));
diff --git a/src/version.c b/src/version.c
index 5a9f50f6e..95d4cc1a1 100644
--- a/src/version.c
+++ b/src/version.c
@@ -704,6 +704,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    903,
 /**/
     902,
 /**/

-- 
-- 
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php

--- 
You received this message because you are subscribed to the Google Groups 
"vim_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to vim_dev+unsubscr...@googlegroups.com.
To view this discussion visit 
https://groups.google.com/d/msgid/vim_dev/E1tIv4V-008VQ2-DL%40256bit.org.

Raspunde prin e-mail lui