]> git.proxmox.com Git - mirror_edk2.git/commitdiff
ShellPkg: Add checks for NULL pointers.
authorjcarsey <jcarsey@6f19259b-4bc3-4df7-8a09-765794883524>
Mon, 10 Oct 2011 20:32:17 +0000 (20:32 +0000)
committerjcarsey <jcarsey@6f19259b-4bc3-4df7-8a09-765794883524>
Mon, 10 Oct 2011 20:32:17 +0000 (20:32 +0000)
This adds lots of pointer verification with ASSERTs only used when the condition should be impossible and never for memory allocation.

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

git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@12523 6f19259b-4bc3-4df7-8a09-765794883524

ShellPkg/Application/Shell/FileHandleWrappers.c
ShellPkg/Application/Shell/ShellManParser.c
ShellPkg/Library/UefiHandleParsingLib/UefiHandleParsingLib.c
ShellPkg/Library/UefiShellDebug1CommandsLib/Comp.c
ShellPkg/Library/UefiShellDebug1CommandsLib/Compress.c
ShellPkg/Library/UefiShellDebug1CommandsLib/Edit/Edit.c
ShellPkg/Library/UefiShellDebug1CommandsLib/EfiCompress.c
ShellPkg/Library/UefiShellDebug1CommandsLib/EfiDecompress.c
ShellPkg/Library/UefiShellDebug1CommandsLib/HexEdit/FileImage.c

index 2e1ce08ef3dfe53961ea98786ea779060d0cbd27..2ca13cb3f3f73ad482ca52c6e89bfa65bc69b6d0 100644 (file)
@@ -1327,7 +1327,8 @@ FileInterfaceMemGetPosition(
   @param[in, out] BufferSize   Size in bytes of Buffer.\r
   @param[in] Buffer            The pointer to the buffer to write.\r
   \r
-  @retval EFI_SUCCESS   The data was written.\r
+  @retval EFI_OUT_OF_RESOURCES The operation failed due to lack of resources.\r
+  @retval EFI_SUCCESS          The data was written.\r
 **/\r
 EFI_STATUS\r
 EFIAPI\r
@@ -1354,6 +1355,9 @@ FileInterfaceMemWrite(
     // Ascii\r
     //\r
     AsciiBuffer = AllocateZeroPool(*BufferSize);\r
+    if (AsciiBuffer == NULL) {\r
+      return (EFI_OUT_OF_RESOURCES);\r
+    }\r
     AsciiSPrint(AsciiBuffer, *BufferSize, "%S", Buffer);\r
     if ((UINTN)(((EFI_FILE_PROTOCOL_MEM*)This)->Position + AsciiStrSize(AsciiBuffer)) > (UINTN)(((EFI_FILE_PROTOCOL_MEM*)This)->BufferSize)) {\r
       ((EFI_FILE_PROTOCOL_MEM*)This)->Buffer = ReallocatePool((UINTN)(((EFI_FILE_PROTOCOL_MEM*)This)->BufferSize), (UINTN)(((EFI_FILE_PROTOCOL_MEM*)This)->BufferSize) + AsciiStrSize(AsciiBuffer) + 10, ((EFI_FILE_PROTOCOL_MEM*)This)->Buffer);\r
index bcc1f8e0a3b463fa65225e0dda70a7b3551d5c8e..bd2efcb423d60081a98c921c417caa8f6e2ea99e 100644 (file)
@@ -548,7 +548,8 @@ ManFileFindTitleSection(
   @retval EFI_SUCCESS           The help text was returned.\r
   @retval EFI_OUT_OF_RESOURCES  The necessary buffer could not be allocated to hold the\r
                                 returned help text.\r
-  @retval EFI_INVALID_PARAMETER HelpText is NULL\r
+  @retval EFI_INVALID_PARAMETER HelpText is NULL.\r
+  @retval EFI_INVALID_PARAMETER ManFileName is invalid.\r
   @retval EFI_NOT_FOUND         There is no help text available for Command.\r
 **/\r
 EFI_STATUS\r
@@ -594,6 +595,9 @@ ProcessManFile(
   } else {\r
     FileHandle    = NULL;\r
     TempString  = GetManFileName(ManFileName);\r
+    if (TempString == NULL) {\r
+      return (EFI_INVALID_PARAMETER);\r
+    }\r
 \r
     Status = SearchPathForFile(TempString, &FileHandle);\r
     if (EFI_ERROR(Status)) {\r
index 77f7756dc7237178f2e6c9dcf4c284ee9a537146..9e5164821747bb976c032c178d7eba5d2d3947a3 100644 (file)
@@ -206,8 +206,10 @@ TxtOutProtocolDumpInformation(
   RetVal = AllocateZeroPool(Size);\r
 \r
   Temp = HiiGetString(mHandleParsingHiiHandle, STRING_TOKEN(STR_TXT_OUT_DUMP_HEADER), NULL);\r
-  UnicodeSPrint(RetVal, Size, Temp, Dev, Dev->Mode->Attribute);\r
-  FreePool(Temp);\r
+  if (Temp != NULL) {\r
+    UnicodeSPrint(RetVal, Size, Temp, Dev, Dev->Mode->Attribute);\r
+    FreePool(Temp);\r
+  }\r
 \r
   //\r
   // Dump TextOut Info\r
@@ -219,7 +221,7 @@ TxtOutProtocolDumpInformation(
     UnicodeSPrint(\r
       RetVal + StrLen(RetVal),\r
       NewSize,\r
-      Temp,\r
+      Temp == NULL?L"":Temp,\r
       Index == Dev->Mode->Mode ? L'*' : L' ',\r
       Index,\r
       !EFI_ERROR(Status)?Col:-1,\r
index b59ef31682c5917bd072eda03c4bda874c7231af..01ef1997b2dfe577c483f3599f0e8ef9d35239dc 100644 (file)
@@ -49,6 +49,7 @@ ShellCommandRunComp (
   UINTN               DataSizeFromFile2;\r
   CHAR16              *FileName1;\r
   CHAR16              *FileName2;\r
+  CONST CHAR16        *TempParam;\r
 \r
   ErrorCount          = 0;\r
   ShellStatus         = SHELL_SUCCESS;\r
@@ -88,25 +89,29 @@ ShellCommandRunComp (
       ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_TOO_FEW), gShellDebug1HiiHandle);\r
       ShellStatus = SHELL_INVALID_PARAMETER;\r
     } else {\r
-      FileName1 = ShellFindFilePath(ShellCommandLineGetRawValue(Package, 1));\r
+      TempParam = ShellCommandLineGetRawValue(Package, 1);\r
+      ASSERT(TempParam != NULL);\r
+      FileName1 = ShellFindFilePath(TempParam);\r
       if (FileName1 == NULL) {\r
-        ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_FILE_FIND_FAIL), gShellDebug1HiiHandle, ShellCommandLineGetRawValue(Package, 1));\r
+        ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_FILE_FIND_FAIL), gShellDebug1HiiHandle, TempParam);\r
         ShellStatus = SHELL_NOT_FOUND;\r
       } else {\r
         Status = ShellOpenFileByName(FileName1, &FileHandle1, EFI_FILE_MODE_READ, 0);\r
         if (EFI_ERROR(Status)) {\r
-          ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_FILE_OPEN_FAIL), gShellDebug1HiiHandle, ShellCommandLineGetRawValue(Package, 1), Status);\r
+          ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_FILE_OPEN_FAIL), gShellDebug1HiiHandle, TempParam, Status);\r
           ShellStatus = SHELL_NOT_FOUND;\r
         }\r
       }\r
-      FileName2 = ShellFindFilePath(ShellCommandLineGetRawValue(Package, 2));\r
+      TempParam = ShellCommandLineGetRawValue(Package, 2);\r
+      ASSERT(TempParam != NULL);\r
+      FileName2 = ShellFindFilePath(TempParam);\r
       if (FileName2 == NULL) {\r
-        ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_FILE_FIND_FAIL), gShellDebug1HiiHandle, ShellCommandLineGetRawValue(Package, 2));\r
+        ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_FILE_FIND_FAIL), gShellDebug1HiiHandle, TempParam);\r
         ShellStatus = SHELL_NOT_FOUND;\r
       } else {\r
         Status = ShellOpenFileByName(FileName2, &FileHandle2, EFI_FILE_MODE_READ, 0);\r
         if (EFI_ERROR(Status)) {\r
-          ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_FILE_OPEN_FAIL), gShellDebug1HiiHandle, ShellCommandLineGetRawValue(Package, 2), Status);\r
+          ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_FILE_OPEN_FAIL), gShellDebug1HiiHandle, TempParam, Status);\r
           ShellStatus = SHELL_NOT_FOUND;\r
         }\r
       }\r
index 06a3210ea09a72b97dd349338539ce1d1e81cc9d..b1f8327f4ab01ae7276a0d4a8ed3eefc18f78a41 100644 (file)
@@ -607,8 +607,10 @@ FreadCrc (
   Advance the current position (read in new data if needed).\r
   Delete outdated string info. Find a match string for current position.\r
 \r
+  @retval TRUE      The operation was successful.\r
+  @retval FALSE     The operation failed due to insufficient memory.\r
 **/\r
-VOID\r
+BOOLEAN\r
 EFIAPI\r
 GetNextMatch (\r
   VOID\r
@@ -621,6 +623,9 @@ GetNextMatch (
   mPos++;\r
   if (mPos == WNDSIZ * 2) {\r
     Temp = AllocateZeroPool (WNDSIZ + MAXMATCH);\r
+    if (Temp == NULL) {\r
+      return (FALSE);\r
+    }\r
     CopyMem (Temp, &mText[WNDSIZ], WNDSIZ + MAXMATCH);\r
     CopyMem (&mText[0], Temp, WNDSIZ + MAXMATCH);\r
     FreePool (Temp);\r
@@ -631,6 +636,8 @@ GetNextMatch (
 \r
   DeleteNode ();\r
   InsertNode ();\r
+\r
+  return (TRUE);\r
 }\r
 \r
 /**\r
@@ -1286,7 +1293,9 @@ Encode (
   while (mRemainder > 0) {\r
     LastMatchLen  = mMatchLen;\r
     LastMatchPos  = mMatchPos;\r
-    GetNextMatch ();\r
+    if (!GetNextMatch ()) {\r
+      Status = EFI_OUT_OF_RESOURCES;\r
+    }\r
     if (mMatchLen > mRemainder) {\r
       mMatchLen = mRemainder;\r
     }\r
@@ -1306,7 +1315,9 @@ Encode (
              (mPos - LastMatchPos - 2) & (WNDSIZ - 1));\r
       LastMatchLen--;\r
       while (LastMatchLen > 0) {\r
-        GetNextMatch ();\r
+        if (!GetNextMatch ()) {\r
+          Status = EFI_OUT_OF_RESOURCES;\r
+        }\r
         LastMatchLen--;\r
       }\r
 \r
@@ -1318,7 +1329,7 @@ Encode (
 \r
   HufEncodeEnd ();\r
   FreeMemory ();\r
-  return EFI_SUCCESS;\r
+  return (Status);\r
 }\r
 \r
 /**\r
index c4dbf80c96f01a9a154493eed736ea8288006ce8..c28f9bc59135315f21d057b2a90ed94cefc242d1 100644 (file)
@@ -36,6 +36,7 @@ ShellCommandRunEdit (
   CONST CHAR16        *Cwd;\r
   CHAR16              *Nfs;\r
   CHAR16              *Spot;\r
+  CONST CHAR16        *TempParam;\r
 //  SHELL_FILE_HANDLE   TempHandle;\r
 \r
   Buffer      = NULL;\r
@@ -101,7 +102,9 @@ ShellCommandRunEdit (
         // if editor launched with file named\r
         //\r
         if (ShellCommandLineGetCount(Package) == 2) {\r
-          FileBufferSetFileName (ShellCommandLineGetRawValue(Package, 1));\r
+          TempParam = ShellCommandLineGetRawValue(Package, 1);\r
+          ASSERT(TempParam != NULL);\r
+          FileBufferSetFileName (TempParam);\r
 //          if (EFI_ERROR(ShellFileExists(MainEditor.FileBuffer->FileName))) {\r
 //            Status = ShellOpenFileByName(MainEditor.FileBuffer->FileName, &TempHandle, EFI_FILE_MODE_CREATE|EFI_FILE_MODE_READ|EFI_FILE_MODE_WRITE, 0);\r
 //            if (!EFI_ERROR(Status)) {\r
index d4bb6217b0fa3c30c3132efa0cae666d2ebd43a3..25e8718980f69e5bcc8d776e5126115feb05ca87 100644 (file)
@@ -42,6 +42,7 @@ ShellCommandRunEfiCompress (
   VOID                *InBuffer;\r
   CHAR16              *InFileName;\r
   CONST CHAR16        *OutFileName;\r
+  CONST CHAR16        *TempParam;\r
 \r
   InFileName          = NULL;\r
   OutFileName         = NULL;\r
@@ -82,10 +83,12 @@ ShellCommandRunEfiCompress (
       ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_TOO_FEW), gShellDebug1HiiHandle);\r
       ShellStatus = SHELL_INVALID_PARAMETER;\r
     } else {\r
-      InFileName = ShellFindFilePath(ShellCommandLineGetRawValue(Package, 1));\r
+      TempParam = ShellCommandLineGetRawValue(Package, 1);\r
+      ASSERT(TempParam != NULL);\r
+      InFileName = ShellFindFilePath(TempParam);\r
       OutFileName = ShellCommandLineGetRawValue(Package, 2);\r
       if (InFileName == NULL) {\r
-        ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_FILE_FIND_FAIL), gShellDebug1HiiHandle, ShellCommandLineGetRawValue(Package, 1));\r
+        ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_FILE_FIND_FAIL), gShellDebug1HiiHandle, TempParam);\r
         ShellStatus = SHELL_NOT_FOUND;\r
       } else {\r
         if (ShellIsDirectory(InFileName) == EFI_SUCCESS){\r
index 4b4671b4554f8efd2c944c3c97c0c4047cdb397c..35a32f1f3b78bc2988b1fd51f6d10ac97d760ba4 100644 (file)
@@ -46,6 +46,7 @@ ShellCommandRunEfiDecompress (
   UINT32              ScratchSize;\r
   VOID                *ScratchBuffer;\r
   EFI_DECOMPRESS_PROTOCOL *Decompress;\r
+  CONST CHAR16        *TempParam;\r
 \r
   InFileName          = NULL;\r
   OutFileName         = NULL;\r
@@ -87,10 +88,12 @@ ShellCommandRunEfiDecompress (
       ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_TOO_FEW), gShellDebug1HiiHandle);\r
       ShellStatus = SHELL_INVALID_PARAMETER;\r
     } else {\r
-      InFileName = ShellFindFilePath(ShellCommandLineGetRawValue(Package, 1));\r
+      TempParam = ShellCommandLineGetRawValue(Package, 1);\r
+      ASSERT(TempParam != NULL);\r
+      InFileName = ShellFindFilePath(TempParam);\r
       OutFileName = ShellCommandLineGetRawValue(Package, 2);\r
       if (InFileName == NULL) {\r
-        ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_FILE_FIND_FAIL), gShellDebug1HiiHandle, ShellCommandLineGetRawValue(Package, 1));\r
+        ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_FILE_FIND_FAIL), gShellDebug1HiiHandle, TempParam);\r
         ShellStatus = SHELL_NOT_FOUND;\r
       } else {\r
         if (ShellIsDirectory(InFileName) == EFI_SUCCESS){\r
index 85626626386511a59eb2ea55e22a980aba5ad015..f5fb7d262a8a60a493908c0709ceb6dad8bc412b 100644 (file)
@@ -169,7 +169,7 @@ HFileImageRead (
   // you should set the status string\r
   //\r
   Status = ReadFileIntoBuffer (FileName, (VOID**)&Buffer, &HFileImage.Size, &HFileImage.ReadOnly);\r
-  if (EFI_ERROR(Status)) {\r
+  if (EFI_ERROR(Status) || Buffer == NULL) {\r
     UnicodeBuffer = CatSPrint(NULL, L"Read error on file &s: %r", FileName, Status);\r
     if (UnicodeBuffer == NULL) {\r
       SHELL_FREE_NON_NULL(Buffer);\r