mirror of
https://github.com/neovim/neovim.git
synced 2024-12-21 03:35:02 -07:00
vim-patch:8.2.4359: crash when repeatedly using :retab
Problem: crash when repeatedly using :retab.
Solution: Bail out when the line is getting too long.
6e28703a8e
Cherry-pick e_resulting_text_too_long from v8.2.3492; put it in globals.h as
it will eventually be used in other files.
Add a modeline to test_retab.vim
This commit is contained in:
parent
05c3d02380
commit
1b0d6bcd53
@ -847,6 +847,10 @@ void ex_retab(exarg_T *eap)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
vcol += win_chartabsize(curwin, ptr + col, (colnr_T)vcol);
|
vcol += win_chartabsize(curwin, ptr + col, (colnr_T)vcol);
|
||||||
|
if (vcol >= MAXCOL) {
|
||||||
|
emsg(_(e_resulting_text_too_long));
|
||||||
|
break;
|
||||||
|
}
|
||||||
col += utfc_ptr2len(ptr + col);
|
col += utfc_ptr2len(ptr + col);
|
||||||
}
|
}
|
||||||
if (new_line == NULL) { // out of memory
|
if (new_line == NULL) { // out of memory
|
||||||
|
@ -1000,6 +1000,8 @@ EXTERN char e_non_empty_string_required[] INIT(= N_("E1142: Non-empty string req
|
|||||||
|
|
||||||
EXTERN char e_cannot_define_autocommands_for_all_events[] INIT(= N_("E1155: Cannot define autocommands for ALL events"));
|
EXTERN char e_cannot_define_autocommands_for_all_events[] INIT(= N_("E1155: Cannot define autocommands for ALL events"));
|
||||||
|
|
||||||
|
EXTERN char e_resulting_text_too_long[] INIT(= N_("E1240: Resulting text too long"));
|
||||||
|
|
||||||
EXTERN char e_highlight_group_name_too_long[] INIT(= N_("E1249: Highlight group name too long"));
|
EXTERN char e_highlight_group_name_too_long[] INIT(= N_("E1249: Highlight group name too long"));
|
||||||
|
|
||||||
EXTERN char top_bot_msg[] INIT(= N_("search hit TOP, continuing at BOTTOM"));
|
EXTERN char top_bot_msg[] INIT(= N_("search hit TOP, continuing at BOTTOM"));
|
||||||
|
@ -69,6 +69,8 @@ func Test_retab()
|
|||||||
call assert_equal(" a b c ", Retab('!', 3))
|
call assert_equal(" a b c ", Retab('!', 3))
|
||||||
call assert_equal(" a b c ", Retab('', 5))
|
call assert_equal(" a b c ", Retab('', 5))
|
||||||
call assert_equal(" a b c ", Retab('!', 5))
|
call assert_equal(" a b c ", Retab('!', 5))
|
||||||
|
|
||||||
|
set tabstop& expandtab&
|
||||||
endfunc
|
endfunc
|
||||||
|
|
||||||
func Test_retab_error()
|
func Test_retab_error()
|
||||||
@ -78,3 +80,22 @@ func Test_retab_error()
|
|||||||
call assert_fails('ret 10000', 'E475:')
|
call assert_fails('ret 10000', 'E475:')
|
||||||
call assert_fails('ret 80000000000000000000', 'E475:')
|
call assert_fails('ret 80000000000000000000', 'E475:')
|
||||||
endfunc
|
endfunc
|
||||||
|
|
||||||
|
func Test_retab_endless()
|
||||||
|
new
|
||||||
|
call setline(1, "\t0\t")
|
||||||
|
let caught = 'no'
|
||||||
|
try
|
||||||
|
while 1
|
||||||
|
set ts=4000
|
||||||
|
retab 4
|
||||||
|
endwhile
|
||||||
|
catch /E1240/
|
||||||
|
let caught = 'yes'
|
||||||
|
endtry
|
||||||
|
bwipe!
|
||||||
|
set tabstop&
|
||||||
|
endfunc
|
||||||
|
|
||||||
|
|
||||||
|
" vim: shiftwidth=2 sts=2 expandtab
|
||||||
|
Loading…
Reference in New Issue
Block a user