ShellPkg: Verify memory allocations without ASSERT.

signed-off-by: jcarsey
reviewed-by: geekboy15a

git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@12522 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
jcarsey 2011-10-10 17:26:25 +00:00
parent 091bb7138b
commit beab0fc5e2
4 changed files with 167 additions and 122 deletions

View File

@ -96,78 +96,25 @@ ShellCommandRunCd (
} }
} else { } else {
Param1Copy = CatSPrint(NULL, L"%s", Param1, NULL); Param1Copy = CatSPrint(NULL, L"%s", Param1, NULL);
Param1Copy = PathCleanUpDirectories(Param1Copy); if (Param1Copy != NULL) {
if (StrCmp(Param1Copy, L".") == 0) { Param1Copy = PathCleanUpDirectories(Param1Copy);
// }
// nothing to do... change to current directory if (Param1Copy != NULL) {
// if (StrCmp(Param1Copy, L".") == 0) {
} 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) {
// //
// change directory on current drive letter // nothing to do... change to current directory
// //
Status = gEfiShellProtocol->SetCurDir(NULL, Drive); } else if (StrCmp(Param1Copy, L"..") == 0) {
if (Status == EFI_NOT_FOUND) { //
ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_CD_NF), gShellLevel2HiiHandle); // 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; 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) {
//
// 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 (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 { } else {
Drive = StrnCatGrow(&Drive, &DriveSize, Param1Copy, 0); Drive = GetFullyQualifiedPath(Directory);
} PathRemoveLastItem(Drive);
//
// 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) { if (ShellStatus == SHELL_SUCCESS && Drive != NULL) {
// //
@ -179,42 +126,99 @@ ShellCommandRunCd (
ShellStatus = SHELL_NOT_FOUND; ShellStatus = SHELL_NOT_FOUND;
} }
} }
if (Handle != NULL) { } else if (StrCmp(Param1Copy, L"\\") == 0) {
gEfiShellProtocol->CloseFile(Handle); //
DEBUG_CODE(Handle = NULL;); // Move to root of current drive
} //
} Directory = ShellGetCurrentDir(NULL);
} else { if (Directory == NULL) {
// ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_NO_CWD), gShellLevel2HiiHandle);
// 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; ShellStatus = SHELL_NOT_FOUND;
} else { } else {
*(Path+1) = CHAR_NULL; Drive = GetFullyQualifiedPath(Directory);
if (Path == Drive + StrLen(Drive)) { while (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 (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); ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_CD_NF), gShellLevel2HiiHandle);
ShellStatus = SHELL_NOT_FOUND; ShellStatus = SHELL_NOT_FOUND;
} else { } else {
Status = gEfiShellProtocol->SetCurDir(Drive, Path+2); *(Path+1) = CHAR_NULL;
ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_CD_PRINT), gShellLevel2HiiHandle, ShellGetCurrentDir(Drive)); 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;
} }
} }
} }

View File

@ -120,9 +120,10 @@ IsValidMove(
@param[in, out] DestPathPointer A pointer to the callee allocated final path. @param[in, out] DestPathPointer A pointer to the callee allocated final path.
@param[in] Cwd A pointer to the current working directory. @param[in] Cwd A pointer to the current working directory.
@retval EFI_INVALID_PARAMETR The DestDir could not be resolved to a location. @retval SHELL_INVALID_PARAMETER The DestDir could not be resolved to a location.
@retval EFI_INVALID_PARAMETR The DestDir could be resolved to more than 1 location. @retval SHELL_INVALID_PARAMETER The DestDir could be resolved to more than 1 location.
@retval EFI_SUCCESS The operation was sucessful. @retval SHELL_INVALID_PARAMETER Cwd is required and is NULL.
@retval SHELL_SUCCESS The operation was sucessful.
**/ **/
SHELL_STATUS SHELL_STATUS
EFIAPI EFIAPI
@ -143,6 +144,9 @@ GetDestinationLocation(
DestPath = NULL; DestPath = NULL;
if (StrStr(DestDir, L"\\") == DestDir) { if (StrStr(DestDir, L"\\") == DestDir) {
if (Cwd == NULL) {
return SHELL_INVALID_PARAMETER;
}
DestPath = AllocateZeroPool(StrSize(Cwd)); DestPath = AllocateZeroPool(StrSize(Cwd));
if (DestPath == NULL) { if (DestPath == NULL) {
return (SHELL_OUT_OF_RESOURCES); return (SHELL_OUT_OF_RESOURCES);
@ -161,6 +165,10 @@ GetDestinationLocation(
// Not existing... must be renaming // Not existing... must be renaming
// //
if ((TempLocation = StrStr(DestDir, L":")) == NULL) { if ((TempLocation = StrStr(DestDir, L":")) == NULL) {
if (Cwd == NULL) {
ShellCloseFileMetaArg(&DestList);
return (SHELL_INVALID_PARAMETER);
}
NewSize = StrSize(Cwd); NewSize = StrSize(Cwd);
NewSize += StrSize(DestDir); NewSize += StrSize(DestDir);
DestPath = AllocateZeroPool(NewSize); DestPath = AllocateZeroPool(NewSize);

View File

@ -179,6 +179,7 @@ ShellCommandRunDate (
EFI_TIME TheTime; EFI_TIME TheTime;
CHAR16 *ProblemParam; CHAR16 *ProblemParam;
SHELL_STATUS ShellStatus; SHELL_STATUS ShellStatus;
CONST CHAR16 *Param1;
ShellStatus = SHELL_SUCCESS; ShellStatus = SHELL_SUCCESS;
ProblemParam = NULL; ProblemParam = NULL;
@ -238,9 +239,14 @@ ShellCommandRunDate (
// //
// perform level 3 operation here. // 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) { 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; ShellStatus = SHELL_INVALID_PARAMETER;
} }
} }

View File

@ -84,6 +84,8 @@ ShellIsDecimalDigitCharacter (
Helper function to find ShellEnvironment2 for constructor. Helper function to find ShellEnvironment2 for constructor.
@param[in] ImageHandle A copy of the calling image's handle. @param[in] ImageHandle A copy of the calling image's handle.
@retval EFI_OUT_OF_RESOURCES Memory allocation failed.
**/ **/
EFI_STATUS EFI_STATUS
EFIAPI EFIAPI
@ -123,7 +125,9 @@ ShellFindSE2 (
// //
if (Status == EFI_BUFFER_TOO_SMALL) { if (Status == EFI_BUFFER_TOO_SMALL) {
Buffer = (EFI_HANDLE*)AllocateZeroPool(BufferSize); Buffer = (EFI_HANDLE*)AllocateZeroPool(BufferSize);
ASSERT(Buffer != NULL); if (Buffer == NULL) {
return (EFI_OUT_OF_RESOURCES);
}
Status = gBS->LocateHandle (ByProtocol, Status = gBS->LocateHandle (ByProtocol,
&gEfiShellEnvironment2Guid, &gEfiShellEnvironment2Guid,
NULL, // ignored for ByProtocol NULL, // ignored for ByProtocol
@ -1360,8 +1364,9 @@ InternalShellConvertFileListType (
// allocate a new EFI_SHELL_FILE_INFO object // allocate a new EFI_SHELL_FILE_INFO object
// //
NewInfo = AllocateZeroPool(sizeof(EFI_SHELL_FILE_INFO)); NewInfo = AllocateZeroPool(sizeof(EFI_SHELL_FILE_INFO));
ASSERT(NewInfo != NULL);
if (NewInfo == NULL) { if (NewInfo == NULL) {
ShellCloseFileMetaArg(&(EFI_SHELL_FILE_INFO*)ListHead);
ListHead = NULL;
break; break;
} }
@ -1384,9 +1389,11 @@ InternalShellConvertFileListType (
// //
// make sure all the memory allocations were sucessful // make sure all the memory allocations were sucessful
// //
ASSERT(NewInfo->FullName != NULL); if (NULL == NewInfo->FullName || NewInfo->FileName == NULL || NewInfo->Info == NULL) {
ASSERT(NewInfo->FileName != NULL); ShellCloseFileMetaArg(&(EFI_SHELL_FILE_INFO*)ListHead);
ASSERT(NewInfo->Info != NULL); ListHead = NULL;
break;
}
// //
// Copt the strings and structure // Copt the strings and structure
@ -1612,7 +1619,6 @@ ShellFindFilePath (
Size = StrSize(Path); Size = StrSize(Path);
Size += StrSize(FileName); Size += StrSize(FileName);
TestPath = AllocateZeroPool(Size); TestPath = AllocateZeroPool(Size);
ASSERT(TestPath != NULL);
if (TestPath == NULL) { if (TestPath == NULL) {
return (NULL); return (NULL);
} }
@ -1719,7 +1725,6 @@ ShellFindFilePathEx (
Size = StrSize(FileName); Size = StrSize(FileName);
Size += StrSize(FileExtension); Size += StrSize(FileExtension);
TestPath = AllocateZeroPool(Size); TestPath = AllocateZeroPool(Size);
ASSERT(TestPath != NULL);
if (TestPath == NULL) { if (TestPath == NULL) {
return (NULL); return (NULL);
} }
@ -1934,8 +1939,9 @@ InternalCommandLineParse (
// //
*CheckPackage = (LIST_ENTRY*)AllocateZeroPool(sizeof(LIST_ENTRY)); *CheckPackage = (LIST_ENTRY*)AllocateZeroPool(sizeof(LIST_ENTRY));
if (*CheckPackage == NULL) { if (*CheckPackage == NULL) {
return EFI_OUT_OF_RESOURCES; return (EFI_OUT_OF_RESOURCES);
} }
InitializeListHead(*CheckPackage); InitializeListHead(*CheckPackage);
// //
@ -1958,9 +1964,17 @@ InternalCommandLineParse (
// this is a flag // this is a flag
// //
CurrentItemPackage = AllocateZeroPool(sizeof(SHELL_PARAM_PACKAGE)); 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])); 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]); StrCpy(CurrentItemPackage->Name, Argv[LoopCounter]);
CurrentItemPackage->Type = CurrentItemType; CurrentItemPackage->Type = CurrentItemType;
CurrentItemPackage->OriginalPosition = (UINTN)(-1); CurrentItemPackage->OriginalPosition = (UINTN)(-1);
@ -2024,11 +2038,19 @@ InternalCommandLineParse (
TempPointer++; TempPointer++;
} }
CurrentItemPackage = AllocateZeroPool(sizeof(SHELL_PARAM_PACKAGE)); 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->Name = NULL;
CurrentItemPackage->Type = TypePosition; CurrentItemPackage->Type = TypePosition;
CurrentItemPackage->Value = AllocateZeroPool(StrSize(TempPointer)); 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); StrCpy(CurrentItemPackage->Value, TempPointer);
CurrentItemPackage->OriginalPosition = Count++; CurrentItemPackage->OriginalPosition = Count++;
InsertHeadList(*CheckPackage, &CurrentItemPackage->Link); InsertHeadList(*CheckPackage, &CurrentItemPackage->Link);
@ -2038,8 +2060,9 @@ InternalCommandLineParse (
// //
if (ProblemParam != NULL) { if (ProblemParam != NULL) {
*ProblemParam = AllocateZeroPool(StrSize(Argv[LoopCounter])); *ProblemParam = AllocateZeroPool(StrSize(Argv[LoopCounter]));
ASSERT(*ProblemParam != NULL); if (*ProblemParam != NULL) {
StrCpy(*ProblemParam, Argv[LoopCounter]); StrCpy(*ProblemParam, Argv[LoopCounter]);
}
} }
ShellCommandLineFreeVarList(*CheckPackage); ShellCommandLineFreeVarList(*CheckPackage);
*CheckPackage = NULL; *CheckPackage = NULL;
@ -2504,7 +2527,9 @@ ShellCopySearchAndReplace(
Replace = StrnCatGrow(&Replace, NULL, ReplaceWith, 0); Replace = StrnCatGrow(&Replace, NULL, ReplaceWith, 0);
} else { } else {
Replace = AllocateZeroPool(StrSize(ReplaceWith) + 2*sizeof(CHAR16)); 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) { if (Replace == NULL) {
return (EFI_OUT_OF_RESOURCES); return (EFI_OUT_OF_RESOURCES);
@ -3092,11 +3117,9 @@ StrnCatGrow (
NewSize += 2 * Count * sizeof(CHAR16); NewSize += 2 * Count * sizeof(CHAR16);
} }
*Destination = ReallocatePool(*CurrentSize, NewSize, *Destination); *Destination = ReallocatePool(*CurrentSize, NewSize, *Destination);
ASSERT(*Destination != NULL);
*CurrentSize = NewSize; *CurrentSize = NewSize;
} else { } else {
*Destination = AllocateZeroPool((Count+1)*sizeof(CHAR16)); *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 @param[in, out] Ascii Boolean value for indicating whether the file is
Ascii (TRUE) or UCS2 (FALSE). 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 @sa ShellFileHandleReadLine
**/ **/
@ -3852,9 +3876,12 @@ ShellFileHandleReturnLine(
Status = ShellFileHandleReadLine(Handle, RetVal, &Size, FALSE, Ascii); Status = ShellFileHandleReadLine(Handle, RetVal, &Size, FALSE, Ascii);
if (Status == EFI_BUFFER_TOO_SMALL) { if (Status == EFI_BUFFER_TOO_SMALL) {
RetVal = AllocateZeroPool(Size); RetVal = AllocateZeroPool(Size);
if (RetVal == NULL) {
return (NULL);
}
Status = ShellFileHandleReadLine(Handle, RetVal, &Size, FALSE, Ascii); Status = ShellFileHandleReadLine(Handle, RetVal, &Size, FALSE, Ascii);
} }
ASSERT_EFI_ERROR(Status);
if (EFI_ERROR(Status) && (RetVal != NULL)) { if (EFI_ERROR(Status) && (RetVal != NULL)) {
FreePool(RetVal); FreePool(RetVal);
RetVal = NULL; RetVal = NULL;