diff --git a/base/shell/cmd/for.c b/base/shell/cmd/for.c index 75b462352cf..67a9240c787 100644 --- a/base/shell/cmd/for.c +++ b/base/shell/cmd/for.c @@ -500,19 +500,27 @@ ExecuteFor(PARSED_COMMAND *Cmd) Cmd->For.Context = lpNew; fc = lpNew; - if (Cmd->For.Switches & FOR_F) + /* Run the extended FOR syntax only if extensions are enabled */ + if (bEnableExtensions) { - Ret = ForF(Cmd, List, Buffer); - } - else if (Cmd->For.Switches & FOR_LOOP) - { - Ret = ForLoop(Cmd, List, Buffer); - } - else if (Cmd->For.Switches & FOR_RECURSIVE) - { - DWORD Len = GetFullPathName(Cmd->For.Params ? Cmd->For.Params : _T("."), - MAX_PATH, Buffer, NULL); - Ret = ForRecursive(Cmd, List, Buffer, &Buffer[Len]); + if (Cmd->For.Switches & FOR_F) + { + Ret = ForF(Cmd, List, Buffer); + } + else if (Cmd->For.Switches & FOR_LOOP) + { + Ret = ForLoop(Cmd, List, Buffer); + } + else if (Cmd->For.Switches & FOR_RECURSIVE) + { + DWORD Len = GetFullPathName(Cmd->For.Params ? Cmd->For.Params : _T("."), + MAX_PATH, Buffer, NULL); + Ret = ForRecursive(Cmd, List, Buffer, &Buffer[Len]); + } + else + { + Ret = ForDir(Cmd, List, Buffer, Buffer); + } } else { diff --git a/base/shell/cmd/parser.c b/base/shell/cmd/parser.c index 21bfd2504a9..048c83e3f96 100644 --- a/base/shell/cmd/parser.c +++ b/base/shell/cmd/parser.c @@ -494,6 +494,10 @@ static PARSED_COMMAND *ParseFor(void) memset(Cmd, 0, sizeof(PARSED_COMMAND)); Cmd->Type = C_FOR; + /* Skip the extended FOR syntax if extensions are disabled */ + if (!bEnableExtensions) + goto parseForBody; + while (1) { if (_tcsicmp(CurrentToken, _T("/D")) == 0) @@ -543,6 +547,8 @@ static PARSED_COMMAND *ParseFor(void) goto error; } +parseForBody: + /* Variable name should be % and just one other character */ if (CurrentToken[0] != _T('%') || _tcslen(CurrentToken) != 2) goto error;