mirror of
https://github.com/ApfelTeeSaft/reactos.git
synced 2026-08-26 19:33:31 +00:00
[CMD] IF: Add extra validity checks in ExecuteIf().
This commit is contained in:
@@ -938,7 +938,7 @@ GetEnvVarOrSpecial(LPCTSTR varName)
|
||||
/* %CMDEXTVERSION% */
|
||||
else if (_tcsicmp(varName, _T("CMDEXTVERSION")) == 0)
|
||||
{
|
||||
/* Set version number to CMDEXTVERSION */
|
||||
/* Set Command Extensions version number to CMDEXTVERSION */
|
||||
_itot(CMDEXTVERSION, ret, 10);
|
||||
return ret;
|
||||
}
|
||||
|
||||
+19
-8
@@ -78,20 +78,19 @@ INT ExecuteIf(PARSED_COMMAND *Cmd)
|
||||
Right = DoDelayedExpansion(Cmd->If.RightArg);
|
||||
if (!Right)
|
||||
{
|
||||
cmd_free(Left);
|
||||
if (Left) cmd_free(Left);
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (bEnableExtensions && (Cmd->If.Operator == IF_CMDEXTVERSION))
|
||||
{
|
||||
/* IF CMDEXTVERSION n: check if Command Extensions version
|
||||
* is greater or equal to n */
|
||||
/* IF CMDEXTVERSION n: check if Command Extensions
|
||||
* version is greater or equal to n. */
|
||||
DWORD n = _tcstoul(Right, ¶m, 10);
|
||||
if (*param != _T('\0'))
|
||||
{
|
||||
error_syntax(Right);
|
||||
cmd_free(Right);
|
||||
return 1;
|
||||
goto fail;
|
||||
}
|
||||
result = (CMDEXTVERSION >= n);
|
||||
}
|
||||
@@ -107,8 +106,7 @@ INT ExecuteIf(PARSED_COMMAND *Cmd)
|
||||
if (*param != _T('\0'))
|
||||
{
|
||||
error_syntax(Right);
|
||||
cmd_free(Right);
|
||||
return 1;
|
||||
goto fail;
|
||||
}
|
||||
result = (nErrorLevel >= n);
|
||||
}
|
||||
@@ -178,11 +176,19 @@ INT ExecuteIf(PARSED_COMMAND *Cmd)
|
||||
case IF_LEQ: result = (result <= 0); break;
|
||||
case IF_GTR: result = (result > 0); break;
|
||||
case IF_GEQ: result = (result >= 0); break;
|
||||
default: goto unknownOp;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
unknownOp:
|
||||
ERR("Unknown IF operator 0x%x\n", Cmd->If.Operator);
|
||||
ASSERT(FALSE);
|
||||
goto fail;
|
||||
}
|
||||
}
|
||||
|
||||
cmd_free(Left);
|
||||
if (Left) cmd_free(Left);
|
||||
cmd_free(Right);
|
||||
|
||||
if (result ^ ((Cmd->If.Flags & IFFLAG_NEGATE) != 0))
|
||||
@@ -195,6 +201,11 @@ INT ExecuteIf(PARSED_COMMAND *Cmd)
|
||||
/* Full condition was false, do the "else" command if there is one */
|
||||
return ExecuteCommand(Cmd->Subcommands->Next);
|
||||
}
|
||||
|
||||
fail:
|
||||
if (Left) cmd_free(Left);
|
||||
cmd_free(Right);
|
||||
return 1;
|
||||
}
|
||||
|
||||
/* EOF */
|
||||
|
||||
Reference in New Issue
Block a user