vim-patch:9.1.0579: Ex command is still executed after giving E1247

Problem:  Ex command is still executed after giving E1247.
Solution: Indicate the error properly and set cmd to NULL.
          (zeertzjq)

closes: vim/vim#15241

d1b5ea984d
This commit is contained in:
zeertzjq 2024-07-14 06:09:53 +08:00
parent 5531c95101
commit 3700d94c6f
2 changed files with 4 additions and 0 deletions

View File

@ -3619,6 +3619,7 @@ static linenr_T get_address(exarg_T *eap, char **ptr, cmd_addr_T addr_type, bool
n = getdigits_int32(&cmd, false, MAXLNUM);
if (n == MAXLNUM) {
*errormsg = _(e_line_number_out_of_range);
cmd = NULL;
goto error;
}
}
@ -3641,6 +3642,7 @@ static linenr_T get_address(exarg_T *eap, char **ptr, cmd_addr_T addr_type, bool
} else {
if (lnum >= 0 && n >= INT32_MAX - lnum) {
*errormsg = _(e_line_number_out_of_range);
cmd = NULL;
goto error;
}
lnum += n;

View File

@ -725,6 +725,8 @@ func Test_address_line_overflow()
call setline(1, range(100))
call assert_fails('|.44444444444444444444444', 'E1247:')
call assert_fails('|.9223372036854775806', 'E1247:')
call assert_fails('.44444444444444444444444d', 'E1247:')
call assert_equal(range(100)->map('string(v:val)'), getline(1, '$'))
$
yank 77777777777777777777