mirror of
https://github.com/vim/vim.git
synced 2025-09-26 04:04:07 -04:00
patch 8.0.0879: crash when shifting with huge number
Problem: Crash when shifting with huge number. Solution: Check for overflow. (Dominique Pelle, closes #1945)
This commit is contained in:
@@ -396,7 +396,10 @@ shift_block(oparg_T *oap, int amount)
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
/* total is number of screen columns to be inserted/removed */
|
/* total is number of screen columns to be inserted/removed */
|
||||||
total = amount * p_sw;
|
total = (int)((unsigned)amount * (unsigned)p_sw);
|
||||||
|
if ((total / p_sw) != amount)
|
||||||
|
return; /* multiplication overflow */
|
||||||
|
|
||||||
oldp = ml_get_curline();
|
oldp = ml_get_curline();
|
||||||
|
|
||||||
if (!left)
|
if (!left)
|
||||||
|
@@ -18,6 +18,14 @@ func Test_block_shift_multibyte()
|
|||||||
q!
|
q!
|
||||||
endfunc
|
endfunc
|
||||||
|
|
||||||
|
func Test_block_shift_overflow()
|
||||||
|
" This used to cause a multiplication overflow followed by a crash.
|
||||||
|
new
|
||||||
|
normal ii
|
||||||
|
exe "normal \<C-V>876543210>"
|
||||||
|
q!
|
||||||
|
endfunc
|
||||||
|
|
||||||
func Test_dotregister_paste()
|
func Test_dotregister_paste()
|
||||||
new
|
new
|
||||||
exe "norm! ihello world\<esc>"
|
exe "norm! ihello world\<esc>"
|
||||||
|
@@ -769,6 +769,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 */
|
||||||
|
/**/
|
||||||
|
879,
|
||||||
/**/
|
/**/
|
||||||
878,
|
878,
|
||||||
/**/
|
/**/
|
||||||
|
Reference in New Issue
Block a user