diff options
Diffstat (limited to 'ShellPkg')
-rw-r--r-- | ShellPkg/Library/UefiShellLevel2CommandsLib/Cd.c | 186 | ||||
-rw-r--r-- | ShellPkg/Library/UefiShellLevel2CommandsLib/Mv.c | 14 | ||||
-rw-r--r-- | ShellPkg/Library/UefiShellLevel2CommandsLib/TimeDate.c | 10 | ||||
-rw-r--r-- | ShellPkg/Library/UefiShellLib/UefiShellLib.c | 65 |
4 files changed, 160 insertions, 115 deletions
diff --git a/ShellPkg/Library/UefiShellLevel2CommandsLib/Cd.c b/ShellPkg/Library/UefiShellLevel2CommandsLib/Cd.c index c753702e81..74beb093c4 100644 --- a/ShellPkg/Library/UefiShellLevel2CommandsLib/Cd.c +++ b/ShellPkg/Library/UefiShellLevel2CommandsLib/Cd.c @@ -96,78 +96,47 @@ ShellCommandRunCd ( }
} else {
Param1Copy = CatSPrint(NULL, L"%s", Param1, NULL);
- Param1Copy = PathCleanUpDirectories(Param1Copy);
- if (StrCmp(Param1Copy, L".") == 0) {
- //
- // nothing to do... change to current directory
- //
- } else if (StrCmp(Param1Copy, L"..") == 0) {
- //
- // Change up one directory...
- //
- Directory = ShellGetCurrentDir(NULL);
- if (Directory == NULL) {
- ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_NO_CWD), gShellLevel2HiiHandle);
- ShellStatus = SHELL_NOT_FOUND;
- } else {
- Drive = GetFullyQualifiedPath(Directory);
- PathRemoveLastItem(Drive);
- }
- if (ShellStatus == SHELL_SUCCESS && Drive != NULL) {
+ if (Param1Copy != NULL) {
+ Param1Copy = PathCleanUpDirectories(Param1Copy);
+ }
+ if (Param1Copy != NULL) {
+ if (StrCmp(Param1Copy, L".") == 0) {
//
- // change directory on current drive letter
+ // nothing to do... change to current directory
//
- Status = gEfiShellProtocol->SetCurDir(NULL, Drive);
- if (Status == EFI_NOT_FOUND) {
- ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_CD_NF), gShellLevel2HiiHandle);
- ShellStatus = SHELL_NOT_FOUND;
- }
- }
- } else if (StrCmp(Param1Copy, L"\\") == 0) {
- //
- // Move to root of current drive
- //
- Directory = ShellGetCurrentDir(NULL);
- if (Directory == NULL) {
- ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_NO_CWD), gShellLevel2HiiHandle);
- ShellStatus = SHELL_NOT_FOUND;
- } else {
- Drive = GetFullyQualifiedPath(Directory);
- while (PathRemoveLastItem(Drive)) ;
- }
- if (ShellStatus == SHELL_SUCCESS && Drive != NULL) {
+ } else if (StrCmp(Param1Copy, L"..") == 0) {
//
- // change directory on current drive letter
+ // Change up one directory...
//
- Status = gEfiShellProtocol->SetCurDir(NULL, Drive);
- if (Status == EFI_NOT_FOUND) {
- ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_CD_NF), gShellLevel2HiiHandle);
+ Directory = ShellGetCurrentDir(NULL);
+ if (Directory == NULL) {
+ ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_NO_CWD), gShellLevel2HiiHandle);
ShellStatus = SHELL_NOT_FOUND;
- }
- }
- } else if (StrStr(Param1Copy, L":") == NULL) {
- if (ShellGetCurrentDir(NULL) == NULL) {
- ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_NO_CWD), gShellLevel2HiiHandle);
- ShellStatus = SHELL_NOT_FOUND;
- } else {
- ASSERT((Drive == NULL && DriveSize == 0) || (Drive != NULL));
- Drive = StrnCatGrow(&Drive, &DriveSize, ShellGetCurrentDir(NULL), 0);
- if (*Param1Copy == L'\\') {
- while (PathRemoveLastItem(Drive)) ;
- Drive = StrnCatGrow(&Drive, &DriveSize, Param1Copy+1, 0);
} else {
- Drive = StrnCatGrow(&Drive, &DriveSize, Param1Copy, 0);
+ Drive = GetFullyQualifiedPath(Directory);
+ PathRemoveLastItem(Drive);
}
+ if (ShellStatus == SHELL_SUCCESS && Drive != NULL) {
+ //
+ // change directory on current drive letter
+ //
+ Status = gEfiShellProtocol->SetCurDir(NULL, Drive);
+ if (Status == EFI_NOT_FOUND) {
+ ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_CD_NF), gShellLevel2HiiHandle);
+ ShellStatus = SHELL_NOT_FOUND;
+ }
+ }
+ } else if (StrCmp(Param1Copy, L"\\") == 0) {
//
- // Verify that this is a valid directory
+ // Move to root of current drive
//
- Status = gEfiShellProtocol->OpenFileByName(Drive, &Handle, EFI_FILE_MODE_READ);
- if (EFI_ERROR(Status)) {
- ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_DIR_NF), gShellLevel2HiiHandle, Drive);
- ShellStatus = SHELL_NOT_FOUND;
- } else if (EFI_ERROR(FileHandleIsDirectory(Handle))) {
- ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_NOT_DIR), gShellLevel2HiiHandle, Drive);
+ Directory = ShellGetCurrentDir(NULL);
+ if (Directory == NULL) {
+ ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_NO_CWD), gShellLevel2HiiHandle);
ShellStatus = SHELL_NOT_FOUND;
+ } else {
+ Drive = GetFullyQualifiedPath(Directory);
+ while (PathRemoveLastItem(Drive)) ;
}
if (ShellStatus == SHELL_SUCCESS && Drive != NULL) {
//
@@ -179,42 +148,77 @@ ShellCommandRunCd ( ShellStatus = SHELL_NOT_FOUND;
}
}
- if (Handle != NULL) {
- gEfiShellProtocol->CloseFile(Handle);
- DEBUG_CODE(Handle = NULL;);
+ } else if (StrStr(Param1Copy, L":") == NULL) {
+ if (ShellGetCurrentDir(NULL) == NULL) {
+ ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_NO_CWD), gShellLevel2HiiHandle);
+ ShellStatus = SHELL_NOT_FOUND;
+ } else {
+ ASSERT((Drive == NULL && DriveSize == 0) || (Drive != NULL));
+ Drive = StrnCatGrow(&Drive, &DriveSize, ShellGetCurrentDir(NULL), 0);
+ if (*Param1Copy == L'\\') {
+ while (PathRemoveLastItem(Drive)) ;
+ Drive = StrnCatGrow(&Drive, &DriveSize, Param1Copy+1, 0);
+ } else {
+ Drive = StrnCatGrow(&Drive, &DriveSize, Param1Copy, 0);
+ }
+ //
+ // Verify that this is a valid directory
+ //
+ Status = gEfiShellProtocol->OpenFileByName(Drive, &Handle, EFI_FILE_MODE_READ);
+ if (EFI_ERROR(Status)) {
+ ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_DIR_NF), gShellLevel2HiiHandle, Drive);
+ ShellStatus = SHELL_NOT_FOUND;
+ } else if (EFI_ERROR(FileHandleIsDirectory(Handle))) {
+ ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_NOT_DIR), gShellLevel2HiiHandle, Drive);
+ ShellStatus = SHELL_NOT_FOUND;
+ }
+ if (ShellStatus == SHELL_SUCCESS && Drive != NULL) {
+ //
+ // change directory on current drive letter
+ //
+ Status = gEfiShellProtocol->SetCurDir(NULL, Drive);
+ if (Status == EFI_NOT_FOUND) {
+ ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_CD_NF), gShellLevel2HiiHandle);
+ ShellStatus = SHELL_NOT_FOUND;
+ }
+ }
+ if (Handle != NULL) {
+ gEfiShellProtocol->CloseFile(Handle);
+ DEBUG_CODE(Handle = NULL;);
+ }
}
- }
- } else {
- //
- // change directory on other drive letter
- //
- Drive = AllocateZeroPool(StrSize(Param1Copy));
- if (Drive == NULL) {
- ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_NO_MEM), gShellLevel2HiiHandle);
- ShellStatus = SHELL_OUT_OF_RESOURCES;
} else {
- Drive = StrCpy(Drive, Param1Copy);
- Path = StrStr(Drive, L":");
- ASSERT(Path != NULL);
- if (*(Path+1) == CHAR_NULL) {
- ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_CD_NF), gShellLevel2HiiHandle);
- ShellStatus = SHELL_NOT_FOUND;
+ //
+ // change directory on other drive letter
+ //
+ Drive = AllocateZeroPool(StrSize(Param1Copy));
+ if (Drive == NULL) {
+ ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_NO_MEM), gShellLevel2HiiHandle);
+ ShellStatus = SHELL_OUT_OF_RESOURCES;
} else {
- *(Path+1) = CHAR_NULL;
- if (Path == Drive + StrLen(Drive)) {
+ Drive = StrCpy(Drive, Param1Copy);
+ Path = StrStr(Drive, L":");
+ ASSERT(Path != NULL);
+ if (*(Path+1) == CHAR_NULL) {
ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_CD_NF), gShellLevel2HiiHandle);
ShellStatus = SHELL_NOT_FOUND;
} else {
- Status = gEfiShellProtocol->SetCurDir(Drive, Path+2);
- ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_CD_PRINT), gShellLevel2HiiHandle, ShellGetCurrentDir(Drive));
+ *(Path+1) = CHAR_NULL;
+ if (Path == Drive + StrLen(Drive)) {
+ ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_CD_NF), gShellLevel2HiiHandle);
+ ShellStatus = SHELL_NOT_FOUND;
+ } else {
+ Status = gEfiShellProtocol->SetCurDir(Drive, Path+2);
+ ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_CD_PRINT), gShellLevel2HiiHandle, ShellGetCurrentDir(Drive));
+ }
+ }
+ if (Status == EFI_NOT_FOUND) {
+ ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_CD_NF), gShellLevel2HiiHandle);
+ Status = SHELL_NOT_FOUND;
+ } else if (EFI_ERROR(Status)) {
+ ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_DIR_NF), gShellLevel2HiiHandle, Param1Copy);
+ Status = SHELL_NOT_FOUND;
}
- }
- if (Status == EFI_NOT_FOUND) {
- ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_CD_NF), gShellLevel2HiiHandle);
- Status = SHELL_NOT_FOUND;
- } else if (EFI_ERROR(Status)) {
- ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_DIR_NF), gShellLevel2HiiHandle, Param1Copy);
- Status = SHELL_NOT_FOUND;
}
}
}
diff --git a/ShellPkg/Library/UefiShellLevel2CommandsLib/Mv.c b/ShellPkg/Library/UefiShellLevel2CommandsLib/Mv.c index b83eede5a9..a93ef33c03 100644 --- a/ShellPkg/Library/UefiShellLevel2CommandsLib/Mv.c +++ b/ShellPkg/Library/UefiShellLevel2CommandsLib/Mv.c @@ -120,9 +120,10 @@ IsValidMove( @param[in, out] DestPathPointer A pointer to the callee allocated final path.
@param[in] Cwd A pointer to the current working directory.
- @retval EFI_INVALID_PARAMETR The DestDir could not be resolved to a location.
- @retval EFI_INVALID_PARAMETR The DestDir could be resolved to more than 1 location.
- @retval EFI_SUCCESS The operation was sucessful.
+ @retval SHELL_INVALID_PARAMETER The DestDir could not be resolved to a location.
+ @retval SHELL_INVALID_PARAMETER The DestDir could be resolved to more than 1 location.
+ @retval SHELL_INVALID_PARAMETER Cwd is required and is NULL.
+ @retval SHELL_SUCCESS The operation was sucessful.
**/
SHELL_STATUS
EFIAPI
@@ -143,6 +144,9 @@ GetDestinationLocation( DestPath = NULL;
if (StrStr(DestDir, L"\\") == DestDir) {
+ if (Cwd == NULL) {
+ return SHELL_INVALID_PARAMETER;
+ }
DestPath = AllocateZeroPool(StrSize(Cwd));
if (DestPath == NULL) {
return (SHELL_OUT_OF_RESOURCES);
@@ -161,6 +165,10 @@ GetDestinationLocation( // Not existing... must be renaming
//
if ((TempLocation = StrStr(DestDir, L":")) == NULL) {
+ if (Cwd == NULL) {
+ ShellCloseFileMetaArg(&DestList);
+ return (SHELL_INVALID_PARAMETER);
+ }
NewSize = StrSize(Cwd);
NewSize += StrSize(DestDir);
DestPath = AllocateZeroPool(NewSize);
diff --git a/ShellPkg/Library/UefiShellLevel2CommandsLib/TimeDate.c b/ShellPkg/Library/UefiShellLevel2CommandsLib/TimeDate.c index 44e83ba254..aa40bbf22f 100644 --- a/ShellPkg/Library/UefiShellLevel2CommandsLib/TimeDate.c +++ b/ShellPkg/Library/UefiShellLevel2CommandsLib/TimeDate.c @@ -179,6 +179,7 @@ ShellCommandRunDate ( EFI_TIME TheTime;
CHAR16 *ProblemParam;
SHELL_STATUS ShellStatus;
+ CONST CHAR16 *Param1;
ShellStatus = SHELL_SUCCESS;
ProblemParam = NULL;
@@ -238,9 +239,14 @@ ShellCommandRunDate ( //
// perform level 3 operation here.
//
- ShellStatus = CheckAndSetDate(ShellCommandLineGetRawValue(Package, 1));
+ Param1 = ShellCommandLineGetRawValue(Package, 1);
+ if (Param1 == NULL) {
+ ShellStatus = SHELL_INVALID_PARAMETER;
+ } else {
+ ShellStatus = CheckAndSetDate(Param1);
+ }
if (ShellStatus != SHELL_SUCCESS) {
- ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_PROBLEM), gShellLevel2HiiHandle, ShellCommandLineGetRawValue(Package, 1));
+ ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_PROBLEM), gShellLevel2HiiHandle, Param1);
ShellStatus = SHELL_INVALID_PARAMETER;
}
}
diff --git a/ShellPkg/Library/UefiShellLib/UefiShellLib.c b/ShellPkg/Library/UefiShellLib/UefiShellLib.c index 06e2386378..474aecb7ae 100644 --- a/ShellPkg/Library/UefiShellLib/UefiShellLib.c +++ b/ShellPkg/Library/UefiShellLib/UefiShellLib.c @@ -84,6 +84,8 @@ ShellIsDecimalDigitCharacter ( Helper function to find ShellEnvironment2 for constructor.
@param[in] ImageHandle A copy of the calling image's handle.
+
+ @retval EFI_OUT_OF_RESOURCES Memory allocation failed.
**/
EFI_STATUS
EFIAPI
@@ -123,7 +125,9 @@ ShellFindSE2 ( //
if (Status == EFI_BUFFER_TOO_SMALL) {
Buffer = (EFI_HANDLE*)AllocateZeroPool(BufferSize);
- ASSERT(Buffer != NULL);
+ if (Buffer == NULL) {
+ return (EFI_OUT_OF_RESOURCES);
+ }
Status = gBS->LocateHandle (ByProtocol,
&gEfiShellEnvironment2Guid,
NULL, // ignored for ByProtocol
@@ -1360,8 +1364,9 @@ InternalShellConvertFileListType ( // allocate a new EFI_SHELL_FILE_INFO object
//
NewInfo = AllocateZeroPool(sizeof(EFI_SHELL_FILE_INFO));
- ASSERT(NewInfo != NULL);
if (NewInfo == NULL) {
+ ShellCloseFileMetaArg(&(EFI_SHELL_FILE_INFO*)ListHead);
+ ListHead = NULL;
break;
}
@@ -1384,9 +1389,11 @@ InternalShellConvertFileListType ( //
// make sure all the memory allocations were sucessful
//
- ASSERT(NewInfo->FullName != NULL);
- ASSERT(NewInfo->FileName != NULL);
- ASSERT(NewInfo->Info != NULL);
+ if (NULL == NewInfo->FullName || NewInfo->FileName == NULL || NewInfo->Info == NULL) {
+ ShellCloseFileMetaArg(&(EFI_SHELL_FILE_INFO*)ListHead);
+ ListHead = NULL;
+ break;
+ }
//
// Copt the strings and structure
@@ -1612,7 +1619,6 @@ ShellFindFilePath ( Size = StrSize(Path);
Size += StrSize(FileName);
TestPath = AllocateZeroPool(Size);
- ASSERT(TestPath != NULL);
if (TestPath == NULL) {
return (NULL);
}
@@ -1719,7 +1725,6 @@ ShellFindFilePathEx ( Size = StrSize(FileName);
Size += StrSize(FileExtension);
TestPath = AllocateZeroPool(Size);
- ASSERT(TestPath != NULL);
if (TestPath == NULL) {
return (NULL);
}
@@ -1934,8 +1939,9 @@ InternalCommandLineParse ( //
*CheckPackage = (LIST_ENTRY*)AllocateZeroPool(sizeof(LIST_ENTRY));
if (*CheckPackage == NULL) {
- return EFI_OUT_OF_RESOURCES;
+ return (EFI_OUT_OF_RESOURCES);
}
+
InitializeListHead(*CheckPackage);
//
@@ -1958,9 +1964,17 @@ InternalCommandLineParse ( // this is a flag
//
CurrentItemPackage = AllocateZeroPool(sizeof(SHELL_PARAM_PACKAGE));
- ASSERT(CurrentItemPackage != NULL);
+ if (CurrentItemPackage == NULL) {
+ ShellCommandLineFreeVarList(*CheckPackage);
+ *CheckPackage = NULL;
+ return (EFI_OUT_OF_RESOURCES);
+ }
CurrentItemPackage->Name = AllocateZeroPool(StrSize(Argv[LoopCounter]));
- ASSERT(CurrentItemPackage->Name != NULL);
+ if (CurrentItemPackage->Name == NULL) {
+ ShellCommandLineFreeVarList(*CheckPackage);
+ *CheckPackage = NULL;
+ return (EFI_OUT_OF_RESOURCES);
+ }
StrCpy(CurrentItemPackage->Name, Argv[LoopCounter]);
CurrentItemPackage->Type = CurrentItemType;
CurrentItemPackage->OriginalPosition = (UINTN)(-1);
@@ -2024,11 +2038,19 @@ InternalCommandLineParse ( TempPointer++;
}
CurrentItemPackage = AllocateZeroPool(sizeof(SHELL_PARAM_PACKAGE));
- ASSERT(CurrentItemPackage != NULL);
+ if (CurrentItemPackage == NULL) {
+ ShellCommandLineFreeVarList(*CheckPackage);
+ *CheckPackage = NULL;
+ return (EFI_OUT_OF_RESOURCES);
+ }
CurrentItemPackage->Name = NULL;
CurrentItemPackage->Type = TypePosition;
CurrentItemPackage->Value = AllocateZeroPool(StrSize(TempPointer));
- ASSERT(CurrentItemPackage->Value != NULL);
+ if (CurrentItemPackage->Value == NULL) {
+ ShellCommandLineFreeVarList(*CheckPackage);
+ *CheckPackage = NULL;
+ return (EFI_OUT_OF_RESOURCES);
+ }
StrCpy(CurrentItemPackage->Value, TempPointer);
CurrentItemPackage->OriginalPosition = Count++;
InsertHeadList(*CheckPackage, &CurrentItemPackage->Link);
@@ -2038,8 +2060,9 @@ InternalCommandLineParse ( //
if (ProblemParam != NULL) {
*ProblemParam = AllocateZeroPool(StrSize(Argv[LoopCounter]));
- ASSERT(*ProblemParam != NULL);
- StrCpy(*ProblemParam, Argv[LoopCounter]);
+ if (*ProblemParam != NULL) {
+ StrCpy(*ProblemParam, Argv[LoopCounter]);
+ }
}
ShellCommandLineFreeVarList(*CheckPackage);
*CheckPackage = NULL;
@@ -2504,7 +2527,9 @@ ShellCopySearchAndReplace( Replace = StrnCatGrow(&Replace, NULL, ReplaceWith, 0);
} else {
Replace = AllocateZeroPool(StrSize(ReplaceWith) + 2*sizeof(CHAR16));
- UnicodeSPrint(Replace, StrSize(ReplaceWith) + 2*sizeof(CHAR16), L"\"%s\"", ReplaceWith);
+ if (Replace != NULL) {
+ UnicodeSPrint(Replace, StrSize(ReplaceWith) + 2*sizeof(CHAR16), L"\"%s\"", ReplaceWith);
+ }
}
if (Replace == NULL) {
return (EFI_OUT_OF_RESOURCES);
@@ -3092,11 +3117,9 @@ StrnCatGrow ( NewSize += 2 * Count * sizeof(CHAR16);
}
*Destination = ReallocatePool(*CurrentSize, NewSize, *Destination);
- ASSERT(*Destination != NULL);
*CurrentSize = NewSize;
} else {
*Destination = AllocateZeroPool((Count+1)*sizeof(CHAR16));
- ASSERT(*Destination != NULL);
}
//
@@ -3831,7 +3854,8 @@ ShellIsHexOrDecimalNumber ( @param[in, out] Ascii Boolean value for indicating whether the file is
Ascii (TRUE) or UCS2 (FALSE).
- @return The line of text from the file.
+ @return The line of text from the file.
+ @retval NULL There was not enough memory available.
@sa ShellFileHandleReadLine
**/
@@ -3852,9 +3876,12 @@ ShellFileHandleReturnLine( Status = ShellFileHandleReadLine(Handle, RetVal, &Size, FALSE, Ascii);
if (Status == EFI_BUFFER_TOO_SMALL) {
RetVal = AllocateZeroPool(Size);
+ if (RetVal == NULL) {
+ return (NULL);
+ }
Status = ShellFileHandleReadLine(Handle, RetVal, &Size, FALSE, Ascii);
+
}
- ASSERT_EFI_ERROR(Status);
if (EFI_ERROR(Status) && (RetVal != NULL)) {
FreePool(RetVal);
RetVal = NULL;
|