mirror of
				https://github.com/neovim/neovim.git
				synced 2025-10-26 12:27:24 +00:00 
			
		
		
		
	vim-patch:9.1.0254: [security]: Heap buffer overflow when calling complete_add() in 'cfu'
Problem:  [security]: Heap buffer overflow when calling complete_add()
          in the first call of 'completefunc'
Solution: Call check_cursor() after calling 'completefunc' (zeertzjq)
closes: vim/vim#14391
0a419e07a7
			
			
This commit is contained in:
		| @@ -2435,7 +2435,8 @@ static void expand_by_function(int type, char *base) | ||||
|   } | ||||
|   textlock--; | ||||
|  | ||||
|   curwin->w_cursor = pos;       // restore the cursor position | ||||
|   curwin->w_cursor = pos;  // restore the cursor position | ||||
|   check_cursor(curwin);  // make sure cursor position is valid, just in case | ||||
|   validate_cursor(curwin); | ||||
|   if (!equalpos(curwin->w_cursor, pos)) { | ||||
|     emsg(_(e_compldel)); | ||||
| @@ -4059,6 +4060,7 @@ static int get_userdefined_compl_info(colnr_T curs_col) | ||||
|  | ||||
|   State = save_State; | ||||
|   curwin->w_cursor = pos;  // restore the cursor position | ||||
|   check_cursor(curwin);  // make sure cursor position is valid, just in case | ||||
|   validate_cursor(curwin); | ||||
|   if (!equalpos(curwin->w_cursor, pos)) { | ||||
|     emsg(_(e_compldel)); | ||||
|   | ||||
| @@ -2490,4 +2490,26 @@ func Test_complete_changed_complete_info() | ||||
|   call StopVimInTerminal(buf) | ||||
| endfunc | ||||
|  | ||||
| func Test_completefunc_first_call_complete_add() | ||||
|   new | ||||
|  | ||||
|   func Complete(findstart, base) abort | ||||
|     if a:findstart | ||||
|       let col = col('.') | ||||
|       call complete_add('#') | ||||
|       return col - 1 | ||||
|     else | ||||
|       return [] | ||||
|     endif | ||||
|   endfunc | ||||
|  | ||||
|   set completeopt=longest completefunc=Complete | ||||
|   " This used to cause heap-buffer-overflow | ||||
|   call assert_fails('call feedkeys("ifoo#\<C-X>\<C-U>", "xt")', 'E840:') | ||||
|  | ||||
|   delfunc Complete | ||||
|   set completeopt& completefunc& | ||||
|   bwipe! | ||||
| endfunc | ||||
|  | ||||
| " vim: shiftwidth=2 sts=2 expandtab nofoldenable | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 zeertzjq
					zeertzjq