]> git.proxmox.com Git - mirror_edk2.git/commitdiff
Verify more memory allocations.
authorjcarsey <jcarsey@6f19259b-4bc3-4df7-8a09-765794883524>
Mon, 4 Oct 2010 16:44:57 +0000 (16:44 +0000)
committerjcarsey <jcarsey@6f19259b-4bc3-4df7-8a09-765794883524>
Mon, 4 Oct 2010 16:44:57 +0000 (16:44 +0000)
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@10910 6f19259b-4bc3-4df7-8a09-765794883524

ShellPkg/Library/UefiShellLevel2CommandsLib/Cp.c
ShellPkg/Library/UefiShellLevel2CommandsLib/Map.c
ShellPkg/Library/UefiShellLevel2CommandsLib/Mv.c
ShellPkg/Library/UefiShellLib/UefiShellLib.c

index 9344c331e58eb0d70c5ac6e1136b42848a7b33ac..f15ff3030a65a362d970e8306f746add3e3a9fae 100644 (file)
@@ -287,7 +287,7 @@ ValidateAndCopyFiles(
   HiiResultOk = HiiGetString (gShellLevel2HiiHandle, STRING_TOKEN (STR_GEN_RES_OK), NULL);\r
   DestPath    = AllocatePool(PathLen);\r
 \r
-  if (HiiOutput == NULL || HiiOutput == NULL || HiiResultOk == NULL) {\r
+  if (DestPath == NULL || HiiOutput == NULL || HiiResultOk == NULL) {\r
     SHELL_FREE_NON_NULL(DestPath);\r
     SHELL_FREE_NON_NULL(HiiOutput);\r
     SHELL_FREE_NON_NULL(HiiResultOk);\r
index f696523f82f32682a3c9dad33bb97d4af49baf81..ccfa0b065478821938d33e0593adc6e3cd082691 100644 (file)
@@ -664,6 +664,9 @@ PerformMappingDelete(
     HandleBuffer);\r
   if (Status == EFI_BUFFER_TOO_SMALL) {\r
     HandleBuffer = AllocatePool(BufferSize);\r
+    if (HandleBuffer == NULL) {\r
+      return (EFI_OUT_OF_RESOURCES);\r
+    }\r
     Status = gBS->LocateHandle(\r
       ByProtocol,\r
       &gEfiDevicePathProtocolGuid,\r
@@ -671,8 +674,10 @@ PerformMappingDelete(
       &BufferSize,\r
       HandleBuffer);\r
   }\r
-  ASSERT_EFI_ERROR(Status);\r
-  ASSERT(HandleBuffer != NULL);\r
+  if (EFI_ERROR(Status)) {\r
+    SHELL_FREE_NON_NULL(HandleBuffer);\r
+    return (Status);\r
+  }\r
 \r
   //\r
   // Get the map name(s) for each one.\r
@@ -698,6 +703,9 @@ PerformMappingDelete(
   if (Status == EFI_BUFFER_TOO_SMALL) {\r
     FreePool(HandleBuffer);\r
     HandleBuffer = AllocatePool(BufferSize);\r
+    if (HandleBuffer == NULL) {\r
+      return (EFI_OUT_OF_RESOURCES);\r
+    }\r
     Status = gBS->LocateHandle(\r
       ByProtocol,\r
       &gEfiBlockIoProtocolGuid,\r
@@ -705,7 +713,10 @@ PerformMappingDelete(
       &BufferSize,\r
       HandleBuffer);\r
   }\r
-  ASSERT_EFI_ERROR(Status);\r
+  if (EFI_ERROR(Status)) {\r
+    SHELL_FREE_NON_NULL(HandleBuffer);\r
+    return (Status);\r
+  }\r
 \r
   //\r
   // Get the map name(s) for each one.\r
index a62878175701e66c343a6b6d451b59f122f72dba..7530289a52f56d8e00ff316261693d9ba7e7adca 100644 (file)
@@ -44,7 +44,7 @@ IsValidMove(
   CHAR16  *Test;\r
   CHAR16  *Test1;\r
   CHAR16  *TestWalker;\r
-  UINTN   Result;\r
+  INTN    Result;\r
   UINTN   TempLen;\r
   if (Cwd != NULL && StrCmp(FullName, Cwd) == 0) {\r
     //\r
@@ -236,6 +236,7 @@ ValidateAndMoveFiles(
   EFI_FILE_INFO             *NewFileInfo;\r
   CHAR16                    *TempLocation;\r
   UINTN                     NewSize;\r
+  UINTN                     Length;\r
 \r
   ASSERT(FileList != NULL);\r
   ASSERT(DestDir  != NULL);\r
@@ -310,12 +311,16 @@ ValidateAndMoveFiles(
       } else {\r
         StrCpy(NewFileInfo->FileName, DestPath);\r
       }\r
-      if (NewFileInfo->FileName[StrLen(NewFileInfo->FileName)-1] == L'\\') {\r
+      Length = StrLen(NewFileInfo->FileName);\r
+      if (Length > 0) {\r
+        Length--;\r
+      }\r
+      if (NewFileInfo->FileName[Length] == L'\\') {\r
         if (Node->FileName[0] == L'\\') {\r
           //\r
           // Don't allow for double slashes. Eliminate one of them.\r
           //\r
-          NewFileInfo->FileName[StrLen(NewFileInfo->FileName)-1] = CHAR_NULL;\r
+          NewFileInfo->FileName[Length] = CHAR_NULL;\r
         }\r
         StrCat(NewFileInfo->FileName, Node->FileName);\r
       }\r
index 1694f463789a7b11b0ed0cb5220023ff2678e72e..bcb6f2a7e4ca143e3f8db1c8121add3cd11cb018 100644 (file)
@@ -1639,31 +1639,36 @@ ShellFindFilePath (
     Size = StrSize(Path)+sizeof(CHAR16);\r
     Size += StrSize(FileName);\r
     TestPath = AllocateZeroPool(Size);\r
+    if (TestPath == NULL) {\r
+      return (NULL);\r
+    }\r
     Walker = (CHAR16*)Path;\r
     do {\r
       CopyMem(TestPath, Walker, StrSize(Walker));\r
-      TempChar = StrStr(TestPath, L";");\r
-      if (TempChar != NULL) {\r
-        *TempChar = CHAR_NULL;\r
-      }\r
-      if (TestPath[StrLen(TestPath)-1] != L'\\') {\r
-        StrCat(TestPath, L"\\");\r
-      }\r
-      StrCat(TestPath, FileName);\r
-      if (StrStr(Walker, L";") != NULL) {\r
-        Walker = StrStr(Walker, L";") + 1;\r
-      } else {\r
-        Walker = NULL;\r
-      }\r
-      Status = ShellOpenFileByName(TestPath, &Handle, EFI_FILE_MODE_READ, 0);\r
-      if (!EFI_ERROR(Status)){\r
-        if (FileHandleIsDirectory(Handle) != EFI_SUCCESS) {\r
-          ASSERT(RetVal == NULL);\r
-          RetVal = StrnCatGrow(&RetVal, NULL, TestPath, 0);\r
-          ShellCloseFile(&Handle);\r
-          break;\r
+      if (TestPath != NULL) {\r
+        TempChar = StrStr(TestPath, L";");\r
+        if (TempChar != NULL) {\r
+          *TempChar = CHAR_NULL;\r
+        }\r
+        if (TestPath[StrLen(TestPath)-1] != L'\\') {\r
+          StrCat(TestPath, L"\\");\r
+        }\r
+        StrCat(TestPath, FileName);\r
+        if (StrStr(Walker, L";") != NULL) {\r
+          Walker = StrStr(Walker, L";") + 1;\r
         } else {\r
-          ShellCloseFile(&Handle);\r
+          Walker = NULL;\r
+        }\r
+        Status = ShellOpenFileByName(TestPath, &Handle, EFI_FILE_MODE_READ, 0);\r
+        if (!EFI_ERROR(Status)){\r
+          if (FileHandleIsDirectory(Handle) != EFI_SUCCESS) {\r
+            ASSERT(RetVal == NULL);\r
+            RetVal = StrnCatGrow(&RetVal, NULL, TestPath, 0);\r
+            ShellCloseFile(&Handle);\r
+            break;\r
+          } else {\r
+            ShellCloseFile(&Handle);\r
+          }\r
         }\r
       }\r
     } while (Walker != NULL && Walker[0] != CHAR_NULL);\r
@@ -2460,6 +2465,9 @@ ShellCopySearchAndReplace(
     Replace = AllocateZeroPool(StrSize(ReplaceWith) + 2*sizeof(CHAR16));\r
     UnicodeSPrint(Replace, StrSize(ReplaceWith) + 2*sizeof(CHAR16), L"\"%s\"", ReplaceWith);\r
   }\r
+  if (Replace == NULL) {\r
+    return (EFI_OUT_OF_RESOURCES);\r
+  }\r
   NewString = SetMem16(NewString, NewSize, CHAR_NULL);\r
   while (*SourceString != CHAR_NULL) {\r
     //\r
@@ -2702,6 +2710,9 @@ ShellPrintEx(
 {\r
   VA_LIST           Marker;\r
   EFI_STATUS        RetVal;\r
+  if (Format == NULL) {\r
+    return (EFI_INVALID_PARAMETER);\r
+  }\r
   VA_START (Marker, Format);\r
   RetVal = InternalShellPrintWorker(Col, Row, Format, Marker);\r
   VA_END(Marker);\r
@@ -2784,7 +2795,8 @@ ShellIsDirectory(
 {\r
   EFI_STATUS        Status;\r
   SHELL_FILE_HANDLE Handle;\r
-        CHAR16      *TempLocation;\r
+  CHAR16            *TempLocation;\r
+  CHAR16            *TempLocation2;\r
 \r
   ASSERT(DirName != NULL);\r
 \r
@@ -2797,9 +2809,10 @@ ShellIsDirectory(
     // try good logic first.\r
     //\r
     if (mEfiShellProtocol != NULL) {\r
-      TempLocation = StrnCatGrow(&TempLocation, NULL, DirName, 0);\r
-      if (StrStr(TempLocation, L":") != NULL && StrLen(StrStr(TempLocation, L":")) == 2) {\r
-        *(StrStr(TempLocation, L":")+1) = CHAR_NULL;\r
+      TempLocation  = StrnCatGrow(&TempLocation, NULL, DirName, 0);\r
+      TempLocation2 = StrStr(TempLocation, L":");\r
+      if (TempLocation2 != NULL && StrLen(StrStr(TempLocation, L":")) == 2) {\r
+        *(TempLocation2+1) = CHAR_NULL;\r
       }\r
       if (mEfiShellProtocol->GetDevicePathFromMap(TempLocation) != NULL) {\r
         FreePool(TempLocation);\r
@@ -3074,6 +3087,9 @@ ShellPromptForResponse (
   Size    = 0;\r
   if (Type != ShellPromptResponseTypeFreeform) {\r
     Resp = (SHELL_PROMPT_RESPONSE*)AllocatePool(sizeof(SHELL_PROMPT_RESPONSE));\r
+    if (Resp == NULL) {\r
+      return (EFI_OUT_OF_RESOURCES);\r
+    }\r
   }\r
 \r
   switch(Type) {\r