diff --git a/ShellPkg/Application/Shell/Shell.c b/ShellPkg/Application/Shell/Shell.c index 78a64de19e..03f5e4f05f 100644 --- a/ShellPkg/Application/Shell/Shell.c +++ b/ShellPkg/Application/Shell/Shell.c @@ -1578,11 +1578,18 @@ RunSplitCommand( SHELL_FREE_NON_NULL(OurCommandLine); SHELL_FREE_NON_NULL(NextCommandLine); return (EFI_INVALID_PARAMETER); - } else if (NextCommandLine[0] != CHAR_NULL && - NextCommandLine[0] == L'a' && - NextCommandLine[1] == L' ' - ){ + } else if (NextCommandLine[0] == L'a' && + (NextCommandLine[1] == L' ' || NextCommandLine[1] == CHAR_NULL) + ){ CopyMem(NextCommandLine, NextCommandLine+1, StrSize(NextCommandLine) - sizeof(NextCommandLine[0])); + while (NextCommandLine[0] == L' ') { + CopyMem(NextCommandLine, NextCommandLine+1, StrSize(NextCommandLine) - sizeof(NextCommandLine[0])); + } + if (NextCommandLine[0] == CHAR_NULL) { + SHELL_FREE_NON_NULL(OurCommandLine); + SHELL_FREE_NON_NULL(NextCommandLine); + return (EFI_INVALID_PARAMETER); + } Unicode = FALSE; } else { Unicode = TRUE; @@ -1883,6 +1890,13 @@ VerifySplit( CONST CHAR16 *TempSpot; EFI_STATUS Status; + // + // If this was the only item, then get out + // + if (!ContainsSplit(CmdLine)) { + return (EFI_SUCCESS); + } + // // Verify up to the pipe or end character // @@ -1891,17 +1905,17 @@ VerifySplit( return (Status); } - // - // If this was the only item, then get out - // - if (!ContainsSplit(CmdLine)) { - return (EFI_SUCCESS); - } - // // recurse to verify the next item // TempSpot = FindFirstCharacter(CmdLine, L"|", L'^') + 1; + if (*TempSpot == L'a' && + (*(TempSpot + 1) == L' ' || *(TempSpot + 1) == CHAR_NULL) + ) { + // If it's an ASCII pipe '|a' + TempSpot += 1; + } + return (VerifySplit(TempSpot)); }