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