0
0
mirror of https://github.com/vim/vim.git synced 2025-09-24 03:44:06 -04:00

patch 8.2.4919: can add invalid bytes with :spellgood

Problem:    Can add invalid bytes with :spellgood.
Solution:   Check for a valid word string.
This commit is contained in:
Bram Moolenaar
2022-05-08 22:32:58 +01:00
parent 9830db6305
commit 7c824682d2
5 changed files with 22 additions and 1 deletions

View File

@@ -3273,3 +3273,7 @@ EXTERN char e_stray_closing_curly_str[]
EXTERN char e_missing_close_curly_str[] EXTERN char e_missing_close_curly_str[]
INIT(= N_("E1279: Missing '}': %s")); INIT(= N_("E1279: Missing '}': %s"));
#endif #endif
#ifdef FEAT_SPELL
EXTERN char e_illegal_character_in_word[]
INIT(= N_("E1280: Illegal character in word"));
#endif

View File

@@ -4226,7 +4226,7 @@ theend:
convert_setup(&vimconv, NULL, NULL); convert_setup(&vimconv, NULL, NULL);
} }
#if defined(FEAT_GUI_GTK) || defined(PROTO) #if defined(FEAT_GUI_GTK) || defined(FEAT_SPELL) || defined(PROTO)
/* /*
* Return TRUE if string "s" is a valid utf-8 string. * Return TRUE if string "s" is a valid utf-8 string.
* When "end" is NULL stop at the first NUL. * When "end" is NULL stop at the first NUL.

View File

@@ -4390,6 +4390,10 @@ store_word(
int res = OK; int res = OK;
char_u *p; char_u *p;
// Avoid adding illegal bytes to the word tree.
if (enc_utf8 && !utf_valid_string(word, NULL))
return FAIL;
(void)spell_casefold(curwin, word, len, foldword, MAXWLEN); (void)spell_casefold(curwin, word, len, foldword, MAXWLEN);
for (p = pfxlist; res == OK; ++p) for (p = pfxlist; res == OK; ++p)
{ {
@@ -6190,6 +6194,12 @@ spell_add_word(
int i; int i;
char_u *spf; char_u *spf;
if (enc_utf8 && !utf_valid_string(word, NULL))
{
emsg(_(e_illegal_character_in_word));
return;
}
if (idx == 0) // use internal wordlist if (idx == 0) // use internal wordlist
{ {
if (int_wordlist == NULL) if (int_wordlist == NULL)

View File

@@ -780,5 +780,10 @@ func Test_no_crash_with_weird_text()
bwipe! bwipe!
endfunc endfunc
" Invalid bytes may cause trouble when creating the word list.
func Test_check_for_valid_word()
call assert_fails("spellgood! 0\xac", 'E1280:')
endfunc
" vim: shiftwidth=2 sts=2 expandtab " vim: shiftwidth=2 sts=2 expandtab

View File

@@ -746,6 +746,8 @@ static char *(features[]) =
static int included_patches[] = static int included_patches[] =
{ /* Add new patch number below this line */ { /* Add new patch number below this line */
/**/
4919,
/**/ /**/
4918, 4918,
/**/ /**/