mirror of
https://github.com/vim/vim.git
synced 2025-09-25 03:54:15 -04:00
patch 8.2.4975: recursive command line loop may cause a crash
Problem: Recursive command line loop may cause a crash. Solution: Limit recursion of getcmdline().
This commit is contained in:
@@ -1581,6 +1581,7 @@ getcmdline_int(
|
||||
int indent, // indent for inside conditionals
|
||||
int clear_ccline) // clear ccline first
|
||||
{
|
||||
static int depth = 0; // call depth
|
||||
int c;
|
||||
int i;
|
||||
int j;
|
||||
@@ -1611,6 +1612,9 @@ getcmdline_int(
|
||||
int cmdline_type;
|
||||
int wild_type;
|
||||
|
||||
// one recursion level deeper
|
||||
++depth;
|
||||
|
||||
if (ccline.cmdbuff != NULL)
|
||||
{
|
||||
// Being called recursively. Since ccline is global, we need to save
|
||||
@@ -1641,6 +1645,13 @@ getcmdline_int(
|
||||
if (init_ccline(firstc, indent) != OK)
|
||||
goto theend; // out of memory
|
||||
|
||||
if (depth == 50)
|
||||
{
|
||||
// Somehow got into a loop recursively calling getcmdline(), bail out.
|
||||
emsg(_(e_command_too_recursive));
|
||||
goto theend;
|
||||
}
|
||||
|
||||
ExpandInit(&xpc);
|
||||
ccline.xpc = &xpc;
|
||||
|
||||
@@ -2576,6 +2587,7 @@ theend:
|
||||
{
|
||||
char_u *p = ccline.cmdbuff;
|
||||
|
||||
--depth;
|
||||
if (did_save_ccline)
|
||||
restore_cmdline(&save_ccline);
|
||||
else
|
||||
|
Reference in New Issue
Block a user