96 lines
3.2 KiB
Diff
96 lines
3.2 KiB
Diff
From 6d24b4ff69913270ce1e5267dd6bd8454f75e2b9 Mon Sep 17 00:00:00 2001
|
|
From: Bram Moolenaar <Bram@vim.org>
|
|
Date: Mon, 23 May 2022 12:01:50 +0100
|
|
Subject: [PATCH] patch 8.2.5007: spell suggestion may use uninitialized memory
|
|
|
|
Problem: Spell suggestion may use uninitialized memory. (Zdenek Dohnal)
|
|
Solution: Avoid going over the end of the word.
|
|
---
|
|
src/spellsuggest.c | 3 ++-
|
|
src/testdir/test_spell_utf8.vim | 23 ++++++++++++++++++++---
|
|
2 files changed, 22 insertions(+), 4 deletions(-)
|
|
|
|
diff --git a/src/spellsuggest.c b/src/spellsuggest.c
|
|
index 0f833f5..2b7d13b 100644
|
|
--- a/src/spellsuggest.c
|
|
+++ b/src/spellsuggest.c
|
|
@@ -1924,7 +1924,8 @@ suggest_trie_walk(
|
|
#endif
|
|
++depth;
|
|
sp = &stack[depth];
|
|
- ++sp->ts_fidx;
|
|
+ if (fword[sp->ts_fidx] != NUL)
|
|
+ ++sp->ts_fidx;
|
|
tword[sp->ts_twordlen++] = c;
|
|
sp->ts_arridx = idxs[arridx];
|
|
if (newscore == SCORE_SUBST)
|
|
diff --git a/src/testdir/test_spell_utf8.vim b/src/testdir/test_spell_utf8.vim
|
|
index 79dc3e4..491a406 100644
|
|
--- a/src/testdir/test_spell_utf8.vim
|
|
+++ b/src/testdir/test_spell_utf8.vim
|
|
@@ -629,7 +629,7 @@ func Test_spell_affix()
|
|
\ ["bar", "barbork", "end", "fooa1", "fooa\u00E9", "nouend", "prebar", "prebarbork", "start"],
|
|
\ [
|
|
\ ["bad", ["bar", "end", "fooa1"]],
|
|
- \ ["foo", ["fooa1", "fooa\u00E9", "bar"]],
|
|
+ \ ["foo", ["fooa1", "bar", "end"]],
|
|
\ ["fooa2", ["fooa1", "fooa\u00E9", "bar"]],
|
|
\ ["prabar", ["prebar", "bar", "bar bar"]],
|
|
\ ["probarbirk", ["prebarbork"]],
|
|
@@ -647,7 +647,7 @@ func Test_spell_affix()
|
|
\ ["bar", "barbork", "end", "lead", "meea1", "meea\u00E9", "prebar", "prebarbork"],
|
|
\ [
|
|
\ ["bad", ["bar", "end", "lead"]],
|
|
- \ ["mee", ["meea1", "meea\u00E9", "bar"]],
|
|
+ \ ["mee", ["meea1", "bar", "end"]],
|
|
\ ["meea2", ["meea1", "meea\u00E9", "lead"]],
|
|
\ ["prabar", ["prebar", "bar", "leadbar"]],
|
|
\ ["probarbirk", ["prebarbork"]],
|
|
@@ -664,7 +664,7 @@ func Test_spell_affix()
|
|
\ ["bar", "barmeat", "lead", "meea1", "meea\u00E9", "meezero", "prebar", "prebarmeat", "tail"],
|
|
\ [
|
|
\ ["bad", ["bar", "lead", "tail"]],
|
|
- \ ["mee", ["meea1", "meea\u00E9", "bar"]],
|
|
+ \ ["mee", ["meea1", "bar", "lead"]],
|
|
\ ["meea2", ["meea1", "meea\u00E9", "lead"]],
|
|
\ ["prabar", ["prebar", "bar", "leadbar"]],
|
|
\ ["probarmaat", ["prebarmeat"]],
|
|
@@ -758,11 +758,15 @@ func Test_spell_sal_and_addition()
|
|
set spl=Xtest_ca.utf-8.spl
|
|
call assert_equal("elequint", FirstSpellWord())
|
|
call assert_equal("elekwint", SecondSpellWord())
|
|
+
|
|
+ set spellfile=
|
|
+ set spl&
|
|
endfunc
|
|
|
|
func Test_spellfile_value()
|
|
set spellfile=Xdir/Xtest.utf-8.add
|
|
set spellfile=Xdir/Xtest.utf-8.add,Xtest_other.add
|
|
+ set spellfile=
|
|
endfunc
|
|
|
|
func Test_no_crash_with_weird_text()
|
|
@@ -780,5 +784,18 @@ func Test_no_crash_with_weird_text()
|
|
bwipe!
|
|
endfunc
|
|
|
|
+" This was going over the end of the word
|
|
+func Test_word_index()
|
|
+ new
|
|
+ norm R0
|
|
+ spellgood! fl0
|
|
+ sil norm z=
|
|
+
|
|
+ bwipe!
|
|
+ " clear the word list
|
|
+ set enc=utf-8
|
|
+ call delete('Xtmpfile')
|
|
+endfunc
|
|
+
|
|
|
|
" vim: shiftwidth=2 sts=2 expandtab
|
|
--
|
|
1.8.3.1
|
|
|