mirror of
				https://github.com/vim/vim.git
				synced 2025-10-30 09:47:20 -04:00 
			
		
		
		
	patch 8.2.3484: crash when going through spell suggestions
Problem:    Crash when going through spell suggestions.
Solution:   Limit the text length for finding suggestions to the original
            length.  Do not update buffers when exiting. (closes #8965)
			
			
This commit is contained in:
		| @@ -199,7 +199,8 @@ clip_lose_selection(Clipboard_T *cbd) | |||||||
| 					    || get_real_state() == SELECTMODE) | 					    || get_real_state() == SELECTMODE) | ||||||
| 		&& (cbd == &clip_star ? | 		&& (cbd == &clip_star ? | ||||||
| 				clip_isautosel_star() : clip_isautosel_plus()) | 				clip_isautosel_star() : clip_isautosel_plus()) | ||||||
| 		&& HL_ATTR(HLF_V) != HL_ATTR(HLF_VNC)) | 		&& HL_ATTR(HLF_V) != HL_ATTR(HLF_VNC) | ||||||
|  | 		&& !exiting) | ||||||
| 	{ | 	{ | ||||||
| 	    update_curbuf(INVERTED_ALL); | 	    update_curbuf(INVERTED_ALL); | ||||||
| 	    setcursor(); | 	    setcursor(); | ||||||
|   | |||||||
| @@ -1178,6 +1178,11 @@ suggest_try_change(suginfo_T *su) | |||||||
|     p = su->su_badptr + su->su_badlen; |     p = su->su_badptr + su->su_badlen; | ||||||
|     (void)spell_casefold(curwin, p, (int)STRLEN(p), fword + n, MAXWLEN - n); |     (void)spell_casefold(curwin, p, (int)STRLEN(p), fword + n, MAXWLEN - n); | ||||||
|  |  | ||||||
|  |     // Make sure the resulting text is not longer than the original text. | ||||||
|  |     n = (int)STRLEN(su->su_badptr); | ||||||
|  |     if (n < MAXWLEN) | ||||||
|  | 	fword[n] = NUL; | ||||||
|  |  | ||||||
|     for (lpi = 0; lpi < curwin->w_s->b_langp.ga_len; ++lpi) |     for (lpi = 0; lpi < curwin->w_s->b_langp.ga_len; ++lpi) | ||||||
|     { |     { | ||||||
| 	lp = LANGP_ENTRY(curwin->w_s->b_langp, lpi); | 	lp = LANGP_ENTRY(curwin->w_s->b_langp, lpi); | ||||||
|   | |||||||
| @@ -765,4 +765,20 @@ func Test_spellfile_value() | |||||||
|   set spellfile=Xdir/Xtest.utf-8.add,Xtest_other.add |   set spellfile=Xdir/Xtest.utf-8.add,Xtest_other.add | ||||||
| endfunc | endfunc | ||||||
|  |  | ||||||
|  | func Test_no_crash_with_weird_text() | ||||||
|  |   new | ||||||
|  |   let lines =<< trim END | ||||||
|  |       r<sfile> | ||||||
|  |        | ||||||
|  |  | ||||||
|  |  | ||||||
|  |        | ||||||
|  |   END | ||||||
|  |   call setline(1, lines) | ||||||
|  |   exe "%norm \<C-v>ez=>\<C-v>wzG" | ||||||
|  |  | ||||||
|  |   bwipe! | ||||||
|  | endfunc | ||||||
|  |  | ||||||
|  |  | ||||||
| " vim: shiftwidth=2 sts=2 expandtab | " vim: shiftwidth=2 sts=2 expandtab | ||||||
|   | |||||||
| @@ -757,6 +757,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 */ | ||||||
|  | /**/ | ||||||
|  |     3484, | ||||||
| /**/ | /**/ | ||||||
|     3483, |     3483, | ||||||
| /**/ | /**/ | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user