From f9de140e7f45f4f79123519cb69c385e8e88105b Mon Sep 17 00:00:00 2001 From: Bram Moolenaar Date: Fri, 18 May 2012 18:08:01 +0200 Subject: [PATCH] updated for version 7.3.521 Problem: Using "z=" on a multi-byte character may cause a crash. Solution: Don't use strlen() on an int pointer. --- src/spell.c | 14 ++++++++------ src/version.c | 2 ++ 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/src/spell.c b/src/spell.c index f3d64e7c56..2ab31c92fe 100644 --- a/src/spell.c +++ b/src/spell.c @@ -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; } diff --git a/src/version.c b/src/version.c index 34bba78be3..dd6700dae5 100644 --- a/src/version.c +++ b/src/version.c @@ -714,6 +714,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 521, /**/ 520, /**/