Detect infinite alias self-recursion mixed with other commands, such as in the case of alias a "echo test; a"; a.

(Unfortunately, this does not work if "wait" is used instead of "echo", but oh well)

(cherry picked from commit 797ca99f42)
This commit is contained in:
Monster Iestyn 2019-04-14 16:39:14 +01:00 committed by James R
parent f856f18233
commit db5cb986ee

View file

@ -543,10 +543,7 @@ static void COM_ExecuteString(char *ptext)
if (!stricmp(com_argv[0], a->name)) if (!stricmp(com_argv[0], a->name))
{ {
if (recursion > MAX_ALIAS_RECURSION) if (recursion > MAX_ALIAS_RECURSION)
{
CONS_Alert(CONS_WARNING, M_GetText("Alias recursion cycle detected!\n")); CONS_Alert(CONS_WARNING, M_GetText("Alias recursion cycle detected!\n"));
recursion = 0;
}
else else
{ {
char buf[1024]; char buf[1024];
@ -578,8 +575,10 @@ static void COM_ExecuteString(char *ptext)
} }
WRITESTRING(write, read); WRITESTRING(write, read);
// Monster Iestyn: keep track of how many levels of recursion we're in
recursion++; recursion++;
COM_BufInsertText(buf); COM_BufInsertText(buf);
recursion--;
} }
return; return;
} }