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:
		| @@ -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; |  | ||||||
|           } |           } | ||||||
|         } |         } | ||||||
|       } |       } | ||||||
|   | |||||||
| @@ -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); | ||||||
|   | |||||||
| @@ -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; | ||||||
|           } |           } | ||||||
|         } |         } | ||||||
|   | |||||||
| @@ -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; | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user