]> git.proxmox.com Git - mirror_edk2.git/commitdiff
1) Removing ASSERTs for proper return values.
authorjcarsey <jcarsey@6f19259b-4bc3-4df7-8a09-765794883524>
Mon, 4 Oct 2010 16:24:30 +0000 (16:24 +0000)
committerjcarsey <jcarsey@6f19259b-4bc3-4df7-8a09-765794883524>
Mon, 4 Oct 2010 16:24:30 +0000 (16:24 +0000)
2) Verifying that memory allocations were successful.

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

ShellPkg/Application/Shell/ConsoleLogger.c
ShellPkg/Application/Shell/FileHandleWrappers.c
ShellPkg/Application/Shell/Shell.c
ShellPkg/Application/Shell/ShellEnvVar.c
ShellPkg/Application/Shell/ShellManParser.c
ShellPkg/Application/Shell/ShellParametersProtocol.c
ShellPkg/Application/Shell/ShellProtocol.c

index 4b0d94d2452f1f07f0dd4ef8949fa885c2864a86..2b84d87adb06421c2ad900d80abf7521ceee3b7d 100644 (file)
@@ -39,8 +39,10 @@ ConsoleLoggerInstall(
   EFI_STATUS Status;\r
   ASSERT(ConsoleInfo != NULL);\r
 \r
-  *ConsoleInfo = AllocatePool(sizeof(CONSOLE_LOGGER_PRIVATE_DATA));\r
-  ASSERT(ConsoleInfo != NULL);\r
+  (*ConsoleInfo) = AllocatePool(sizeof(CONSOLE_LOGGER_PRIVATE_DATA));\r
+  if ((*ConsoleInfo) == NULL) {\r
+    return (EFI_OUT_OF_RESOURCES);\r
+  }\r
 \r
   (*ConsoleInfo)->Signature        = CONSOLE_LOGGER_PRIVATE_DATA_SIGNATURE;\r
   (*ConsoleInfo)->OldConOut        = NULL;\r
index 02e42e3c9df6c9db8a03f6a8fd086e8eb95d4e4d..ee13d0cb731552f599c88406053f3801892af5f4 100644 (file)
@@ -1406,7 +1406,7 @@ FileInterfaceMemClose(
   )\r
 {\r
   SHELL_FREE_NON_NULL(((EFI_FILE_PROTOCOL_MEM*)This)->Buffer);\r
-  SHELL_FREE_NON_NULL((EFI_FILE_PROTOCOL_MEM*)This);\r
+  SHELL_FREE_NON_NULL(This);\r
   return (EFI_SUCCESS);\r
 }\r
 \r
@@ -1553,6 +1553,9 @@ CreateFileInterfaceFile(
   EFI_FILE_PROTOCOL_FILE *NewOne;\r
 \r
   NewOne = AllocatePool(sizeof(EFI_FILE_PROTOCOL_FILE));\r
+  if (NewOne == NULL) {\r
+    return (NULL);\r
+  }\r
   CopyMem(NewOne, Template, sizeof(EFI_FILE_PROTOCOL_FILE));\r
   NewOne->Orig    = (EFI_FILE_PROTOCOL *)Template;\r
   NewOne->Unicode = Unicode;\r
index 3401bc064446abb8bb2520e6061e451cabc2fc24..ddd5d1712a704d72580bf9336bad3d6caf2f08ce 100644 (file)
@@ -56,6 +56,7 @@ SHELL_INFO ShellInfoObject = {
 \r
 STATIC CONST CHAR16 mScriptExtension[]      = L".NSH";\r
 STATIC CONST CHAR16 mExecutableExtensions[] = L".NSH;.EFI";\r
+STATIC CONST CHAR16 mStartupScript[]        = L"startup.nsh";\r
 \r
 /**\r
   The entry point for the application.\r
@@ -94,7 +95,9 @@ UefiMain (
   // Clear the screen\r
   //\r
   Status = gST->ConOut->ClearScreen(gST->ConOut);\r
-  ASSERT_EFI_ERROR(Status);\r
+  if (EFI_ERROR(Status)) {\r
+    return (Status);\r
+  }\r
 \r
   //\r
   // Populate the global structure from PCDs\r
@@ -136,178 +139,179 @@ UefiMain (
   // install our console logger.  This will keep a log of the output for back-browsing\r
   //\r
   Status = ConsoleLoggerInstall(ShellInfoObject.LogScreenCount, &ShellInfoObject.ConsoleInfo);\r
-  ASSERT_EFI_ERROR(Status);\r
-\r
-  //\r
-  // Enable the cursor to be visible\r
-  //\r
-  gST->ConOut->EnableCursor (gST->ConOut, TRUE);\r
+  if (!EFI_ERROR(Status)) {\r
+    //\r
+    // Enable the cursor to be visible\r
+    //\r
+    gST->ConOut->EnableCursor (gST->ConOut, TRUE);\r
 \r
-  //\r
-  // If supporting EFI 1.1 we need to install HII protocol\r
-  // only do this if PcdShellRequireHiiPlatform == FALSE\r
-  //\r
-  // remove EFI_UNSUPPORTED check above when complete.\r
-  ///@todo add support for Framework HII\r
+    //\r
+    // If supporting EFI 1.1 we need to install HII protocol\r
+    // only do this if PcdShellRequireHiiPlatform == FALSE\r
+    //\r
+    // remove EFI_UNSUPPORTED check above when complete.\r
+    ///@todo add support for Framework HII\r
 \r
-  //\r
-  // install our (solitary) HII package\r
-  //\r
-  ShellInfoObject.HiiHandle = HiiAddPackages (&gEfiCallerIdGuid, gImageHandle, ShellStrings, NULL);\r
-  if (ShellInfoObject.HiiHandle == NULL) {\r
-    if (PcdGetBool(PcdShellSupportFrameworkHii)) {\r
-      ///@todo Add our package into Framework HII\r
-    }\r
+    //\r
+    // install our (solitary) HII package\r
+    //\r
+    ShellInfoObject.HiiHandle = HiiAddPackages (&gEfiCallerIdGuid, gImageHandle, ShellStrings, NULL);\r
     if (ShellInfoObject.HiiHandle == NULL) {\r
-      return (EFI_NOT_STARTED);\r
+      if (PcdGetBool(PcdShellSupportFrameworkHii)) {\r
+        ///@todo Add our package into Framework HII\r
+      }\r
+      if (ShellInfoObject.HiiHandle == NULL) {\r
+        return (EFI_NOT_STARTED);\r
+      }\r
     }\r
-  }\r
 \r
-  //\r
-  // create and install the EfiShellParametersProtocol\r
-  //\r
-  Status = CreatePopulateInstallShellParametersProtocol(&ShellInfoObject.NewShellParametersProtocol, &ShellInfoObject.RootShellInstance);\r
-  ASSERT_EFI_ERROR(Status);\r
-  ASSERT(ShellInfoObject.NewShellParametersProtocol != NULL);\r
-\r
-  //\r
-  // create and install the EfiShellProtocol\r
-  //\r
-  Status = CreatePopulateInstallShellProtocol(&ShellInfoObject.NewEfiShellProtocol);\r
-  ASSERT_EFI_ERROR(Status);\r
-  ASSERT(ShellInfoObject.NewEfiShellProtocol != NULL);\r
-\r
-  //\r
-  // Now initialize the shell library (it requires Shell Parameters protocol)\r
-  //\r
-  Status = ShellInitialize();\r
-  ASSERT_EFI_ERROR(Status);\r
+    //\r
+    // create and install the EfiShellParametersProtocol\r
+    //\r
+    Status = CreatePopulateInstallShellParametersProtocol(&ShellInfoObject.NewShellParametersProtocol, &ShellInfoObject.RootShellInstance);\r
+    ASSERT_EFI_ERROR(Status);\r
+    ASSERT(ShellInfoObject.NewShellParametersProtocol != NULL);\r
 \r
-  Status = CommandInit();\r
-  ASSERT_EFI_ERROR(Status);\r
+    //\r
+    // create and install the EfiShellProtocol\r
+    //\r
+    Status = CreatePopulateInstallShellProtocol(&ShellInfoObject.NewEfiShellProtocol);\r
+    ASSERT_EFI_ERROR(Status);\r
+    ASSERT(ShellInfoObject.NewEfiShellProtocol != NULL);\r
 \r
-  //\r
-  // Check the command line\r
-  //\r
-  Status = ProcessCommandLine();\r
+    //\r
+    // Now initialize the shell library (it requires Shell Parameters protocol)\r
+    //\r
+    Status = ShellInitialize();\r
+    ASSERT_EFI_ERROR(Status);\r
 \r
-  //\r
-  // If shell support level is >= 1 create the mappings and paths\r
-  //\r
-  if (PcdGet8(PcdShellSupportLevel) >= 1) {\r
-    Status = ShellCommandCreateInitialMappingsAndPaths();\r
-  }\r
+    Status = CommandInit();\r
+    ASSERT_EFI_ERROR(Status);\r
 \r
-  //\r
-  // save the device path for the loaded image and the device path for the filepath (under loaded image)\r
-  // These are where to look for the startup.nsh file\r
-  //\r
-  Status = GetDevicePathsForImageAndFile(&ShellInfoObject.ImageDevPath, &ShellInfoObject.FileDevPath);\r
-  ASSERT_EFI_ERROR(Status);\r
+    //\r
+    // Check the command line\r
+    //\r
+    Status = ProcessCommandLine();\r
 \r
-  //\r
-  // Display the version\r
-  //\r
-  if (!ShellInfoObject.ShellInitSettings.BitUnion.Bits.NoVersion) {\r
-    ShellPrintHiiEx (\r
-      0,\r
-      gST->ConOut->Mode->CursorRow,\r
-      NULL,\r
-      STRING_TOKEN (STR_VER_OUTPUT_MAIN),\r
-      ShellInfoObject.HiiHandle,\r
-      SupportLevel[PcdGet8(PcdShellSupportLevel)],\r
-      gEfiShellProtocol->MajorVersion,\r
-      gEfiShellProtocol->MinorVersion,\r
-      (gST->Hdr.Revision&0xffff0000)>>16,\r
-      (gST->Hdr.Revision&0x0000ffff),\r
-      gST->FirmwareVendor,\r
-      gST->FirmwareRevision\r
-     );\r
-  }\r
+    //\r
+    // If shell support level is >= 1 create the mappings and paths\r
+    //\r
+    if (PcdGet8(PcdShellSupportLevel) >= 1) {\r
+      Status = ShellCommandCreateInitialMappingsAndPaths();\r
+    }\r
 \r
-  //\r
-  // Display the mapping\r
-  //\r
-  if (PcdGet8(PcdShellSupportLevel) >= 2 && !ShellInfoObject.ShellInitSettings.BitUnion.Bits.NoMap) {\r
-    Status = RunCommand(L"map");\r
+    //\r
+    // save the device path for the loaded image and the device path for the filepath (under loaded image)\r
+    // These are where to look for the startup.nsh file\r
+    //\r
+    Status = GetDevicePathsForImageAndFile(&ShellInfoObject.ImageDevPath, &ShellInfoObject.FileDevPath);\r
     ASSERT_EFI_ERROR(Status);\r
-  }\r
 \r
-  //\r
-  // init all the built in alias'\r
-  //\r
-  Status = SetBuiltInAlias();\r
-  ASSERT_EFI_ERROR(Status);\r
-\r
-  //\r
-  // Initialize environment variables\r
-  //\r
-  if (ShellCommandGetProfileList() != NULL) {\r
-    Status = InternalEfiShellSetEnv(L"profiles", ShellCommandGetProfileList(), TRUE);\r
-    ASSERT_EFI_ERROR(Status);\r
-  }\r
+    //\r
+    // Display the version\r
+    //\r
+    if (!ShellInfoObject.ShellInitSettings.BitUnion.Bits.NoVersion) {\r
+      ShellPrintHiiEx (\r
+        0,\r
+        gST->ConOut->Mode->CursorRow,\r
+        NULL,\r
+        STRING_TOKEN (STR_VER_OUTPUT_MAIN),\r
+        ShellInfoObject.HiiHandle,\r
+        SupportLevel[PcdGet8(PcdShellSupportLevel)],\r
+        gEfiShellProtocol->MajorVersion,\r
+        gEfiShellProtocol->MinorVersion,\r
+        (gST->Hdr.Revision&0xffff0000)>>16,\r
+        (gST->Hdr.Revision&0x0000ffff),\r
+        gST->FirmwareVendor,\r
+        gST->FirmwareRevision\r
+       );\r
+    }\r
 \r
-  Size        = 100;\r
-  TempString  = AllocateZeroPool(Size);\r
+    //\r
+    // Display the mapping\r
+    //\r
+    if (PcdGet8(PcdShellSupportLevel) >= 2 && !ShellInfoObject.ShellInitSettings.BitUnion.Bits.NoMap) {\r
+      Status = RunCommand(L"map");\r
+      ASSERT_EFI_ERROR(Status);\r
+    }\r
 \r
-  UnicodeSPrint(TempString, Size, L"%d", PcdGet8(PcdShellSupportLevel));\r
-  Status = InternalEfiShellSetEnv(L"uefishellsupport", TempString, TRUE);\r
-  ASSERT_EFI_ERROR(Status);\r
+    //\r
+    // init all the built in alias'\r
+    //\r
+    Status = SetBuiltInAlias();\r
+    ASSERT_EFI_ERROR(Status);\r
 \r
-  UnicodeSPrint(TempString, Size, L"%d.%d", ShellInfoObject.NewEfiShellProtocol->MajorVersion, ShellInfoObject.NewEfiShellProtocol->MinorVersion);\r
-  Status = InternalEfiShellSetEnv(L"uefishellversion", TempString, TRUE);\r
-  ASSERT_EFI_ERROR(Status);\r
+    //\r
+    // Initialize environment variables\r
+    //\r
+    if (ShellCommandGetProfileList() != NULL) {\r
+      Status = InternalEfiShellSetEnv(L"profiles", ShellCommandGetProfileList(), TRUE);\r
+      ASSERT_EFI_ERROR(Status);\r
+    }\r
 \r
-  UnicodeSPrint(TempString, Size, L"%d.%d", (gST->Hdr.Revision & 0xFFFF0000) >> 16, gST->Hdr.Revision & 0x0000FFFF);\r
-  Status = InternalEfiShellSetEnv(L"uefiversion", TempString, TRUE);\r
-  ASSERT_EFI_ERROR(Status);\r
+    Size        = 100;\r
+    TempString  = AllocateZeroPool(Size);\r
 \r
-  FreePool(TempString);\r
+    UnicodeSPrint(TempString, Size, L"%d", PcdGet8(PcdShellSupportLevel));\r
+    Status = InternalEfiShellSetEnv(L"uefishellsupport", TempString, TRUE);\r
+    ASSERT_EFI_ERROR(Status);\r
 \r
-  if (!EFI_ERROR(Status)) {\r
-    if (!ShellInfoObject.ShellInitSettings.BitUnion.Bits.NoInterrupt) {\r
-      //\r
-      // Set up the event for CTRL-C monitoring...\r
-      //\r
+    UnicodeSPrint(TempString, Size, L"%d.%d", ShellInfoObject.NewEfiShellProtocol->MajorVersion, ShellInfoObject.NewEfiShellProtocol->MinorVersion);\r
+    Status = InternalEfiShellSetEnv(L"uefishellversion", TempString, TRUE);\r
+    ASSERT_EFI_ERROR(Status);\r
 \r
-      ///@todo add support for using SimpleInputEx here\r
-      //  if SimpleInputEx is not available display a warning.\r
-    }\r
+    UnicodeSPrint(TempString, Size, L"%d.%d", (gST->Hdr.Revision & 0xFFFF0000) >> 16, gST->Hdr.Revision & 0x0000FFFF);\r
+    Status = InternalEfiShellSetEnv(L"uefiversion", TempString, TRUE);\r
+    ASSERT_EFI_ERROR(Status);\r
 \r
-    if (!EFI_ERROR(Status) && PcdGet8(PcdShellSupportLevel) >= 1) {\r
-      //\r
-      // process the startup script or launch the called app.\r
-      //\r
-      Status = DoStartupScript(ShellInfoObject.ImageDevPath, ShellInfoObject.FileDevPath);\r
-    }\r
+    FreePool(TempString);\r
 \r
-    if ((PcdGet8(PcdShellSupportLevel) >= 3 || PcdGetBool(PcdShellForceConsole)) && !EFI_ERROR(Status) && !ShellInfoObject.ShellInitSettings.BitUnion.Bits.NoConsoleIn) {\r
-      //\r
-      // begin the UI waiting loop\r
-      //\r
-      do {\r
+    if (!EFI_ERROR(Status)) {\r
+      if (!ShellInfoObject.ShellInitSettings.BitUnion.Bits.NoInterrupt) {\r
         //\r
-        // clean out all the memory allocated for CONST <something> * return values\r
-        // between each shell prompt presentation\r
+        // Set up the event for CTRL-C monitoring...\r
         //\r
-        if (!IsListEmpty(&ShellInfoObject.BufferToFreeList.Link)){\r
-          FreeBufferList(&ShellInfoObject.BufferToFreeList);\r
-        }\r
 \r
+        ///@todo add support for using SimpleInputEx here\r
+        //  if SimpleInputEx is not available display a warning.\r
+      }\r
+\r
+      if (!EFI_ERROR(Status) && PcdGet8(PcdShellSupportLevel) >= 1) {\r
         //\r
-        // Reset page break back to default.\r
+        // process the startup script or launch the called app.\r
         //\r
-        ShellInfoObject.PageBreakEnabled        = PcdGetBool(PcdShellPageBreakDefault);\r
-        ShellInfoObject.ConsoleInfo->Enabled    = TRUE;\r
-        ShellInfoObject.ConsoleInfo->RowCounter = 0;\r
+        Status = DoStartupScript(ShellInfoObject.ImageDevPath, ShellInfoObject.FileDevPath);\r
+      }\r
 \r
+      if ((PcdGet8(PcdShellSupportLevel) >= 3 || PcdGetBool(PcdShellForceConsole)) && !EFI_ERROR(Status) && !ShellInfoObject.ShellInitSettings.BitUnion.Bits.NoConsoleIn) {\r
         //\r
-        // Display Prompt\r
+        // begin the UI waiting loop\r
         //\r
-        Status = DoShellPrompt();\r
-      } while (!ShellCommandGetExit());\r
+        do {\r
+          //\r
+          // clean out all the memory allocated for CONST <something> * return values\r
+          // between each shell prompt presentation\r
+          //\r
+          if (!IsListEmpty(&ShellInfoObject.BufferToFreeList.Link)){\r
+            FreeBufferList(&ShellInfoObject.BufferToFreeList);\r
+          }\r
+\r
+          //\r
+          // Reset page break back to default.\r
+          //\r
+          ShellInfoObject.PageBreakEnabled        = PcdGetBool(PcdShellPageBreakDefault);\r
+          ShellInfoObject.ConsoleInfo->Enabled    = TRUE;\r
+          ShellInfoObject.ConsoleInfo->RowCounter = 0;\r
+\r
+          //\r
+          // Display Prompt\r
+          //\r
+          Status = DoShellPrompt();\r
+        } while (!ShellCommandGetExit());\r
+      }\r
     }\r
   }\r
+\r
   //\r
   // uninstall protocols / free memory / etc...\r
   //\r
@@ -342,7 +346,7 @@ UefiMain (
   }\r
 \r
   if (!IsListEmpty(&ShellInfoObject.SplitList.Link)){\r
-    ASSERT(FALSE);\r
+    ASSERT(FALSE); ///@todo finish this de-allocation.\r
   }\r
 \r
   if (ShellInfoObject.ShellInitSettings.FileName != NULL) {\r
@@ -579,6 +583,9 @@ ProcessCommandLine(
   TempConst = ShellCommandLineGetRawValue(Package, Count++);\r
   if (TempConst != NULL && StrLen(TempConst)) {\r
     ShellInfoObject.ShellInitSettings.FileName = AllocatePool(StrSize(TempConst));\r
+    if (ShellInfoObject.ShellInitSettings.FileName == NULL) {\r
+      return (EFI_OUT_OF_RESOURCES);\r
+    }\r
     StrCpy(ShellInfoObject.ShellInitSettings.FileName, TempConst);\r
     ShellInfoObject.ShellInitSettings.BitUnion.Bits.NoStartup = 1;\r
     for (LoopVar = 0 ; LoopVar < gEfiShellParametersProtocol->Argc ; LoopVar++) {\r
@@ -593,10 +600,18 @@ ProcessCommandLine(
                       &Size,\r
                       L" ",\r
                       0);\r
+          if (ShellInfoObject.ShellInitSettings.FileOptions == NULL) {\r
+            SHELL_FREE_NON_NULL(ShellInfoObject.ShellInitSettings.FileName);\r
+            return (EFI_OUT_OF_RESOURCES);\r
+          }\r
           StrnCatGrow(&ShellInfoObject.ShellInitSettings.FileOptions,\r
                       &Size,\r
                       gEfiShellParametersProtocol->Argv[LoopVar],\r
                       0);\r
+          if (ShellInfoObject.ShellInitSettings.FileOptions == NULL) {\r
+            SHELL_FREE_NON_NULL(ShellInfoObject.ShellInitSettings.FileName);\r
+            return (EFI_OUT_OF_RESOURCES);\r
+          }\r
         }\r
       }\r
     }\r
@@ -676,9 +691,12 @@ DoStartupScript(
       NewSize += StrSize(ShellInfoObject.ShellInitSettings.FileOptions) + sizeof(CHAR16);\r
     }\r
     FileStringPath = AllocateZeroPool(NewSize);\r
+    if (FileStringPath == NULL) {\r
+      return (EFI_OUT_OF_RESOURCES);\r
+    }\r
     StrCpy(FileStringPath, ShellInfoObject.ShellInitSettings.FileName);\r
     if (ShellInfoObject.ShellInitSettings.FileOptions != NULL) {\r
-      StrCat (FileStringPath, L" ");\r
+      StrCat(FileStringPath, L" ");\r
       StrCat(FileStringPath, ShellInfoObject.ShellInitSettings.FileOptions);\r
     }\r
     Status = RunCommand(FileStringPath);\r
@@ -717,7 +735,7 @@ DoStartupScript(
     return (EFI_SUCCESS);\r
   }\r
 \r
-  NamePath = FileDevicePath (NULL, L"startup.nsh");\r
+  NamePath = FileDevicePath (NULL, mStartupScript);\r
   //\r
   // Try the first location\r
   //\r
@@ -736,14 +754,20 @@ DoStartupScript(
   // If we got a file, run it\r
   //\r
   if (!EFI_ERROR(Status)) {\r
-    Status = RunScriptFileHandle (FileHandle, L"startup.nsh");\r
+    Status = RunScriptFileHandle (FileHandle, mStartupScript);\r
     ShellInfoObject.NewEfiShellProtocol->CloseFile(FileHandle);\r
   } else {\r
-    //\r
-    // we return success since we dont need to have a startup script\r
-    //\r
-    Status = EFI_SUCCESS;\r
-    ASSERT(FileHandle == NULL);\r
+    FileStringPath = ShellFindFilePath(mStartupScript);\r
+    if (FileStringPath == NULL) {\r
+      //\r
+      // we return success since we dont need to have a startup script\r
+      //\r
+      Status = EFI_SUCCESS;\r
+      ASSERT(FileHandle == NULL);\r
+    } else {\r
+      Status = RunScriptFile(FileStringPath);\r
+      FreePool(FileStringPath);\r
+    }\r
   }\r
 \r
   FreePool(NamePath);\r
@@ -993,6 +1017,12 @@ ShellConvertVariables (
   NewCommandLine1 = AllocateZeroPool(NewSize);\r
   NewCommandLine2 = AllocateZeroPool(NewSize);\r
   ItemTemp        = AllocateZeroPool(ItemSize+(2*sizeof(CHAR16)));\r
+  if (NewCommandLine1 == NULL || NewCommandLine2 == NULL || ItemTemp == NULL) {\r
+    SHELL_FREE_NON_NULL(NewCommandLine1);\r
+    SHELL_FREE_NON_NULL(NewCommandLine2);\r
+    SHELL_FREE_NON_NULL(ItemTemp);\r
+    return (NULL);\r
+  }\r
   StrCpy(NewCommandLine1, OriginalCommandLine);\r
   for (MasterEnvList = EfiShellGetEnv(NULL)\r
     ;  MasterEnvList != NULL && *MasterEnvList != CHAR_NULL //&& *(MasterEnvList+1) != CHAR_NULL\r
@@ -1225,6 +1255,10 @@ RunCommand(
     PostAliasCmdLine = NULL;\r
   }\r
 \r
+  if (PostVariableCmdLine == NULL) {\r
+    return (EFI_OUT_OF_RESOURCES);\r
+  }\r
+\r
   while (PostVariableCmdLine[StrLen(PostVariableCmdLine)-1] == L' ') {\r
     PostVariableCmdLine[StrLen(PostVariableCmdLine)-1] = CHAR_NULL;\r
   }\r
@@ -1481,13 +1515,19 @@ RunScriptFileHandle (
   PreScriptEchoState = ShellCommandGetEchoState();\r
 \r
   NewScriptFile = (SCRIPT_FILE*)AllocateZeroPool(sizeof(SCRIPT_FILE));\r
-  ASSERT(NewScriptFile != NULL);\r
+  if (NewScriptFile == NULL) {\r
+    return (EFI_OUT_OF_RESOURCES);\r
+  }\r
 \r
   //\r
   // Set up the name\r
   //\r
   ASSERT(NewScriptFile->ScriptName == NULL);\r
   NewScriptFile->ScriptName = StrnCatGrow(&NewScriptFile->ScriptName, NULL, Name, 0);\r
+  if (NewScriptFile->ScriptName == NULL) {\r
+    DeleteScriptFileStruct(NewScriptFile);\r
+    return (EFI_OUT_OF_RESOURCES);\r
+  }\r
 \r
   //\r
   // Save the parameters (used to replace %0 to %9 later on)\r
@@ -1495,10 +1535,17 @@ RunScriptFileHandle (
   NewScriptFile->Argc = ShellInfoObject.NewShellParametersProtocol->Argc;\r
   if (NewScriptFile->Argc != 0) {\r
     NewScriptFile->Argv = (CHAR16**)AllocateZeroPool(NewScriptFile->Argc * sizeof(CHAR16*));\r
-    ASSERT(NewScriptFile->Argv != NULL);\r
+    if (NewScriptFile->Argv == NULL) {\r
+      DeleteScriptFileStruct(NewScriptFile);\r
+      return (EFI_OUT_OF_RESOURCES);\r
+    }\r
     for (LoopVar = 0 ; LoopVar < 10 && LoopVar < NewScriptFile->Argc; LoopVar++) {\r
       ASSERT(NewScriptFile->Argv[LoopVar] == NULL);\r
       NewScriptFile->Argv[LoopVar] = StrnCatGrow(&NewScriptFile->Argv[LoopVar], NULL, ShellInfoObject.NewShellParametersProtocol->Argv[LoopVar], 0);\r
+      if (NewScriptFile->Argv[LoopVar] == NULL) {\r
+        DeleteScriptFileStruct(NewScriptFile);\r
+        return (EFI_OUT_OF_RESOURCES);\r
+      }\r
     }\r
   } else {\r
     NewScriptFile->Argv = NULL;\r
@@ -1518,7 +1565,10 @@ RunScriptFileHandle (
       continue;\r
     }\r
     NewScriptFile->CurrentCommand = AllocateZeroPool(sizeof(SCRIPT_COMMAND_LIST));\r
-    ASSERT(NewScriptFile->CurrentCommand != NULL);\r
+    if (NewScriptFile->CurrentCommand == NULL) {\r
+      DeleteScriptFileStruct(NewScriptFile);\r
+      return (EFI_OUT_OF_RESOURCES);\r
+    }\r
 \r
     NewScriptFile->CurrentCommand->Cl   = CommandLine;\r
     NewScriptFile->CurrentCommand->Data = NULL;\r
@@ -1536,12 +1586,22 @@ RunScriptFileHandle (
   // Now enumerate through the commands and run each one.\r
   //\r
   CommandLine = AllocatePool(PcdGet16(PcdShellPrintBufferSize));\r
+  if (CommandLine == NULL) {\r
+    DeleteScriptFileStruct(NewScriptFile);\r
+    return (EFI_OUT_OF_RESOURCES);\r
+  }\r
   CommandLine2 = AllocatePool(PcdGet16(PcdShellPrintBufferSize));\r
+  if (CommandLine2 == NULL) {\r
+    FreePool(CommandLine);\r
+    DeleteScriptFileStruct(NewScriptFile);\r
+    return (EFI_OUT_OF_RESOURCES);\r
+  }\r
 \r
   for ( NewScriptFile->CurrentCommand = (SCRIPT_COMMAND_LIST *)GetFirstNode(&NewScriptFile->CommandList)\r
       ; !IsNull(&NewScriptFile->CommandList, &NewScriptFile->CurrentCommand->Link)\r
       ; // conditional increment in the body of the loop\r
   ){\r
+    ASSERT(CommandLine2 != NULL);\r
     StrCpy(CommandLine2, NewScriptFile->CurrentCommand->Cl);\r
 \r
     //\r
@@ -1619,7 +1679,7 @@ RunScriptFileHandle (
 \r
       for (CommandLine3 = CommandLine2 ; CommandLine3[0] == L' ' ; CommandLine3++);\r
 \r
-      if (CommandLine3[0] == L':' ) {\r
+      if (CommandLine3 != NULL && CommandLine3[0] == L':' ) {\r
         //\r
         // This line is a goto target / label\r
         //\r
index ff353c4e2a101598db44e0a9697033e656ad797f..cd55fa907be69a6d3f0ac3df4fc066f3ffc3c10f 100644 (file)
@@ -144,27 +144,30 @@ GetEnvironmentVariableList(
   UINTN             ValSize;\r
   ENV_VAR_LIST      *VarList;\r
 \r
-  ASSERT(ListHead != NULL);\r
+  if (ListHead == NULL) {\r
+    return (EFI_INVALID_PARAMETER);\r
+  }\r
 \r
   Status = gRT->QueryVariableInfo(EFI_VARIABLE_NON_VOLATILE|EFI_VARIABLE_BOOTSERVICE_ACCESS, &MaxStorSize, &RemStorSize, &MaxVarSize);\r
-  ASSERT_EFI_ERROR(Status);\r
+  if (EFI_ERROR(Status)) {\r
+    return (Status);\r
+  }\r
 \r
   NameSize = (UINTN)MaxVarSize;\r
   VariableName = AllocatePool(NameSize);\r
+  if (VariableName == NULL) {\r
+    return (EFI_OUT_OF_RESOURCES);\r
+  }\r
   StrCpy(VariableName, L"");\r
 \r
-  while (TRUE) {\r
+  while (!EFI_ERROR(Status)) {\r
     NameSize = (UINTN)MaxVarSize;\r
     Status = gRT->GetNextVariableName(&NameSize, VariableName, &Guid);\r
     if (Status == EFI_NOT_FOUND){\r
       Status = EFI_SUCCESS;\r
       break;\r
     }\r
-    ASSERT_EFI_ERROR(Status);\r
-    if (EFI_ERROR(Status)) {\r
-      break;\r
-    }\r
-    if (CompareGuid(&Guid, &gShellVariableGuid)){\r
+    if (!EFI_ERROR(Status) && CompareGuid(&Guid, &gShellVariableGuid)){\r
       VarList = AllocateZeroPool(sizeof(ENV_VAR_LIST));\r
       ValSize = 0;\r
       Status = SHELL_GET_ENVIRONMENT_VARIABLE_AND_ATTRIBUTES(VariableName, &VarList->Atts, &ValSize, VarList->Val);\r
@@ -173,12 +176,12 @@ GetEnvironmentVariableList(
         ASSERT(VarList->Val != NULL);\r
         Status = SHELL_GET_ENVIRONMENT_VARIABLE_AND_ATTRIBUTES(VariableName, &VarList->Atts, &ValSize, VarList->Val);\r
       }\r
-      ASSERT_EFI_ERROR(Status);\r
-      VarList->Key = AllocatePool(StrSize(VariableName));\r
-      ASSERT(VarList->Key != NULL);\r
-      StrCpy(VarList->Key, VariableName);\r
-\r
-      InsertTailList(ListHead, &VarList->Link);\r
+      if (!EFI_ERROR(Status)) {\r
+        VarList->Key = AllocatePool(StrSize(VariableName));\r
+        ASSERT(VarList->Key != NULL);\r
+        StrCpy(VarList->Key, VariableName);\r
+        InsertTailList(ListHead, &VarList->Link);\r
+      }\r
     } // compare guid\r
   } // while\r
   FreePool(VariableName);\r
index fe9facb483ced97a78f6d95e74cbbc98df0fd816..e184c78d4f36e57dd9d4bcac551e83e8c803a163 100644 (file)
@@ -32,17 +32,23 @@ GetManFileName(
   )\r
 {\r
   CHAR16 *Buffer;\r
-  ASSERT(ManFileName != NULL);\r
+  if (ManFileName == NULL) {\r
+    return (NULL);\r
+  }\r
   //\r
   // Fix the file name\r
   //\r
   if (StrnCmp(ManFileName+StrLen(ManFileName)-4, L".man", 4)==0) {\r
     Buffer = AllocateZeroPool(StrSize(ManFileName));\r
-    StrCpy(Buffer, ManFileName);\r
+    if (Buffer != NULL) {\r
+      StrCpy(Buffer, ManFileName);\r
+    }\r
   } else {\r
     Buffer = AllocateZeroPool(StrSize(ManFileName) + 4*sizeof(CHAR16));\r
-    StrCpy(Buffer, ManFileName);\r
-    StrCat(Buffer, L".man");\r
+    if (Buffer != NULL) {\r
+      StrCpy(Buffer, ManFileName);\r
+      StrCat(Buffer, L".man");\r
+    }\r
   }\r
   return (Buffer);\r
 }\r
index 914853fdbf991da0f2435bff377652039a8167ce..5e3e48b414c4116973c87d51028234a4e702d421 100644 (file)
@@ -280,7 +280,9 @@ CreatePopulateInstallShellParametersProtocol (
   // Allocate the new structure\r
   //\r
   *NewShellParameters = AllocateZeroPool(sizeof(EFI_SHELL_PARAMETERS_PROTOCOL));\r
-  ASSERT(NewShellParameters != NULL);\r
+  if ((*NewShellParameters) == NULL) {\r
+    return (EFI_OUT_OF_RESOURCES);\r
+  }\r
 \r
   //\r
   // get loaded image protocol\r
@@ -307,19 +309,22 @@ CreatePopulateInstallShellParametersProtocol (
     // no parameters via environment... ok\r
     //\r
   } else {\r
-    ASSERT_EFI_ERROR(Status);\r
+    if (EFI_ERROR(Status)) {\r
+      return (Status);\r
+    }\r
   }\r
   if (Size == 0 && LoadedImage->LoadOptionsSize != 0) {\r
+    ASSERT(FullCommandLine == NULL);\r
     //\r
     // Now we need to include a NULL terminator in the size.\r
     //\r
     Size = LoadedImage->LoadOptionsSize + sizeof(FullCommandLine[0]);\r
     FullCommandLine = AllocateZeroPool(Size);\r
   }\r
-  if (LoadedImage->LoadOptionsSize != 0){\r
-    StrCpy(FullCommandLine, LoadedImage->LoadOptions);\r
-  }\r
   if (FullCommandLine != NULL) {\r
+    if (LoadedImage->LoadOptionsSize != 0){\r
+      StrCpy(FullCommandLine, LoadedImage->LoadOptions);\r
+    }\r
     //\r
     // Populate Argc and Argv\r
     //\r
@@ -685,6 +690,8 @@ UpdateStdInStdOutStdErr(
       ||(StdInFileName  != NULL && StdInVarName  != NULL)\r
       ||(StdErrVarName  != NULL && !IsVolatileEnv(StdErrVarName))\r
       ||(StdOutVarName  != NULL && !IsVolatileEnv(StdOutVarName))\r
+      ||(StrStr(NewCommandLine, L"connect -r") != NULL \r
+         && (StdOutVarName != NULL || StdOutFileName != NULL || StdErrFileName != NULL || StdErrVarName != NULL))\r
       ){\r
       Status = EFI_INVALID_PARAMETER;\r
     } else {\r
@@ -733,31 +740,34 @@ UpdateStdInStdOutStdErr(
           ShellInfoObject.NewEfiShellProtocol->DeleteFileByName(StdOutFileName);\r
         }\r
         Status = ShellOpenFileByName(StdOutFileName, &TempHandle, EFI_FILE_MODE_WRITE|EFI_FILE_MODE_READ|EFI_FILE_MODE_CREATE,0);\r
-        ASSERT(TempHandle != NULL);\r
-        if (!OutAppend && OutUnicode && !EFI_ERROR(Status)) {\r
-          //\r
-          // Write out the UnicodeFileTag\r
-          //\r
-          Size = sizeof(CHAR16);\r
-          TagBuffer[0] = UnicodeFileTag;\r
-          TagBuffer[1] = CHAR_NULL;\r
-          ShellInfoObject.NewEfiShellProtocol->WriteFile(TempHandle, &Size, TagBuffer);\r
-        } else if (OutAppend) {\r
-          //\r
-          // Move to end of file\r
-          //\r
-          Status = ShellInfoObject.NewEfiShellProtocol->GetFileSize(TempHandle, &FileSize);\r
+        if (TempHandle == NULL) {\r
+          Status = EFI_INVALID_PARAMETER;\r
+        } else {\r
+          if (!OutAppend && OutUnicode && !EFI_ERROR(Status)) {\r
+            //\r
+            // Write out the UnicodeFileTag\r
+            //\r
+            Size = sizeof(CHAR16);\r
+            TagBuffer[0] = UnicodeFileTag;\r
+            TagBuffer[1] = CHAR_NULL;\r
+            ShellInfoObject.NewEfiShellProtocol->WriteFile(TempHandle, &Size, TagBuffer);\r
+          } else if (OutAppend) {\r
+            //\r
+            // Move to end of file\r
+            //\r
+            Status = ShellInfoObject.NewEfiShellProtocol->GetFileSize(TempHandle, &FileSize);\r
+            if (!EFI_ERROR(Status)) {\r
+              Status = ShellInfoObject.NewEfiShellProtocol->SetFilePosition(TempHandle, FileSize);\r
+            }\r
+          }\r
+          if (!OutUnicode && !EFI_ERROR(Status)) {\r
+            TempHandle = CreateFileInterfaceFile(TempHandle, FALSE);\r
+            ASSERT(TempHandle != NULL);\r
+          }\r
           if (!EFI_ERROR(Status)) {\r
-            Status = ShellInfoObject.NewEfiShellProtocol->SetFilePosition(TempHandle, FileSize);\r
+            ShellParameters->StdOut = TempHandle;\r
           }\r
         }\r
-        if (!OutUnicode && !EFI_ERROR(Status)) {\r
-          TempHandle = CreateFileInterfaceFile(TempHandle, FALSE);\r
-          ASSERT(TempHandle != NULL);\r
-        }\r
-        if (!EFI_ERROR(Status)) {\r
-          ShellParameters->StdOut = TempHandle;\r
-        }\r
       }\r
 \r
       //\r
index 27488ab62ee238aaabc2a3a4c8b5f060076c72f7..eaec87971d96277a6152383af8a24f8a5e15cacb 100644 (file)
@@ -666,6 +666,9 @@ EfiShellGetDeviceName(
       }\r
       if (Language == NULL) {\r
         Lang = AllocatePool(AsciiStrSize(CompName2->SupportedLanguages));\r
+        if (Lang == NULL) {\r
+          return (EFI_OUT_OF_RESOURCES);\r
+        }\r
         AsciiStrCpy(Lang, CompName2->SupportedLanguages);\r
         TempChar = AsciiStrStr(Lang, ";");\r
         if (TempChar != NULL){\r
@@ -673,6 +676,9 @@ EfiShellGetDeviceName(
         }\r
       } else {\r
         Lang = AllocatePool(AsciiStrSize(Language));\r
+        if (Lang == NULL) {\r
+          return (EFI_OUT_OF_RESOURCES);\r
+        }\r
         AsciiStrCpy(Lang, Language);\r
       }\r
       Status = CompName2->GetControllerName(CompName2, DeviceHandle, NULL, Lang, &DeviceNameToReturn);\r
@@ -686,7 +692,7 @@ EfiShellGetDeviceName(
       FreePool(HandleList);\r
     }\r
     if (DeviceNameToReturn != NULL){\r
-      ASSERT(BestDeviceName == NULL);\r
+      ASSERT(BestDeviceName != NULL);\r
       StrnCatGrow(BestDeviceName, NULL, DeviceNameToReturn, 0);\r
       return (EFI_SUCCESS);\r
     }\r
@@ -2270,6 +2276,12 @@ EfiShellGetEnv(
     Size += 2*sizeof(CHAR16);\r
 \r
     Buffer = AllocateZeroPool(Size);\r
+    if (Buffer == NULL) {\r
+      if (!IsListEmpty (&List)) {\r
+        FreeEnvironmentVariableList(&List);\r
+      }\r
+      return (NULL);\r
+    }\r
     CurrentWriteLocation = (CHAR16*)Buffer;\r
 \r
     for ( Node = (ENV_VAR_LIST*)GetFirstNode(&List)\r
@@ -2284,7 +2296,9 @@ EfiShellGetEnv(
     //\r
     // Free the list...\r
     //\r
-    FreeEnvironmentVariableList(&List);\r
+    if (!IsListEmpty (&List)) {\r
+      FreeEnvironmentVariableList(&List);\r
+    }\r
   } else {\r
     //\r
     // We are doing a specific environment variable\r
@@ -2506,7 +2520,7 @@ EfiShellSetCurDir(
   TempString    = NULL;\r
   DirectoryName = NULL;\r
 \r
-  if (FileSystem == NULL && Dir == NULL) {\r
+  if ((FileSystem == NULL && Dir == NULL) || Dir == NULL) {\r
     return (EFI_INVALID_PARAMETER);\r
   }\r
 \r
@@ -2733,6 +2747,10 @@ InternalEfiShellGetListAlias(
   RetSize       = 0;\r
   RetVal        = NULL;\r
 \r
+  if (VariableName == NULL) {\r
+    return (NULL);\r
+  }\r
+\r
   VariableName[0] = CHAR_NULL;\r
 \r
   while (TRUE) {\r