]> git.ipfire.org Git - thirdparty/vim.git/commitdiff
updated for version 7.3.521 v7.3.521
authorBram Moolenaar <Bram@vim.org>
Fri, 18 May 2012 16:08:01 +0000 (18:08 +0200)
committerBram Moolenaar <Bram@vim.org>
Fri, 18 May 2012 16:08:01 +0000 (18:08 +0200)
Problem:    Using "z=" on a multi-byte character may cause a crash.
Solution:   Don't use strlen() on an int pointer.

src/spell.c
src/version.c

index f3d64e7c567f12a7a970f223924f7477f83051d3..2ab31c92fe0aa39f5152f3945736549dcd0f612b 100644 (file)
@@ -14494,13 +14494,15 @@ spell_soundfold_wsal(slang, inword, res)
     int                p0 = -333;
     int                c0;
     int                did_white = FALSE;
+    int                wordlen;
+
 
     /*
      * Convert the multi-byte string to a wide-character string.
      * Remove accents, if wanted.  We actually remove all non-word characters.
      * But keep white space.
      */
-    n = 0;
+    wordlen = 0;
     for (s = inword; *s != NUL; )
     {
        t = s;
@@ -14521,12 +14523,12 @@ spell_soundfold_wsal(slang, inword, res)
                    continue;
            }
        }
-       word[n++] = c;
+       word[wordlen++] = c;
     }
-    word[n] = NUL;
+    word[wordlen] = NUL;
 
     /*
-     * This comes from Aspell phonet.cpp.
+     * This algorithm comes from Aspell phonet.cpp.
      * Converted from C++ to C.  Added support for multi-byte chars.
      * Changed to keep spaces.
      */
@@ -14711,7 +14713,7 @@ spell_soundfold_wsal(slang, inword, res)
                            }
                        if (k > k0)
                            mch_memmove(word + i + k0, word + i + k,
-                                   sizeof(int) * (STRLEN(word + i + k) + 1));
+                                   sizeof(int) * (wordlen - (i + k) + 1));
 
                        /* new "actual letter" */
                        c = word[i];
@@ -14739,7 +14741,7 @@ spell_soundfold_wsal(slang, inword, res)
                            if (c != NUL)
                                wres[reslen++] = c;
                            mch_memmove(word, word + i + 1,
-                                   sizeof(int) * (STRLEN(word + i + 1) + 1));
+                                      sizeof(int) * (wordlen - (i + 1) + 1));
                            i = 0;
                            z0 = 1;
                        }
index 34bba78be3caa21367f9e5816793245c48bc44b9..dd6700dae50b3c1c910db2c333da5391246dbead 100644 (file)
@@ -714,6 +714,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    521,
 /**/
     520,
 /**/