]> git.proxmox.com Git - mirror_edk2.git/commitdiff
prevents "" from being the result of trying to open the root of a drive.
authorjcarsey <jcarsey@6f19259b-4bc3-4df7-8a09-765794883524>
Mon, 28 Mar 2011 21:49:17 +0000 (21:49 +0000)
committerjcarsey <jcarsey@6f19259b-4bc3-4df7-8a09-765794883524>
Mon, 28 Mar 2011 21:49:17 +0000 (21:49 +0000)
more input validation on vol command.

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

ShellPkg/Application/Shell/ShellProtocol.c
ShellPkg/Library/UefiShellLevel2CommandsLib/Vol.c

index e2da5d37ad2970f54a5df07824622ed67c914160..2d587ea03b1f3838144bd61ce40f17a46841db9c 100644 (file)
@@ -585,7 +585,11 @@ EfiShellGetDevicePathFromFilePath(
   //\r
   // build the full device path\r
   //\r
-  DevicePathForReturn = FileDevicePath(Handle, Path+StrLen(MapName)+1);\r
+  if (*(Path+StrLen(MapName)+1) == CHAR_NULL) {\r
+    DevicePathForReturn = FileDevicePath(Handle, L"\\");\r
+  } else {\r
+    DevicePathForReturn = FileDevicePath(Handle, Path+StrLen(MapName)+1);\r
+  }\r
 \r
   FreePool(MapName);\r
   if (DevicePathCopyForFree != NULL) {\r
index 3688a503a7ddfecf5cda44b44b552a3b723be08e..8757ff1b302319990ee40ea463477b5cfdf2e596 100644 (file)
@@ -108,13 +108,24 @@ HandleVol(
     }\r
   }\r
 \r
-  SysInfo = AllocateZeroPool(SysInfoSize);\r
+  SysInfoSize = 0;\r
+  SysInfo = NULL;\r
+\r
   Status = EfiFpHandle->GetInfo(\r
     EfiFpHandle,\r
     &gEfiFileSystemInfoGuid,\r
     &SysInfoSize,\r
     SysInfo);\r
 \r
+  if (Status == EFI_BUFFER_TOO_SMALL) {\r
+    SysInfo = AllocateZeroPool(SysInfoSize);\r
+    Status = EfiFpHandle->GetInfo(\r
+      EfiFpHandle,\r
+      &gEfiFileSystemInfoGuid,\r
+      &SysInfoSize,\r
+      SysInfo);\r
+  }\r
+\r
   gEfiShellProtocol->CloseFile(ShellFileHandle);\r
 \r
   //\r
@@ -164,6 +175,7 @@ ShellCommandRunVol (
   CONST CHAR16  *CurDir;\r
   BOOLEAN       DeleteMode;\r
   CHAR16        *FullPath;\r
+  CHAR16        *TempSpot;\r
   UINTN         Length;\r
 \r
   Length              = 0;\r
@@ -220,10 +232,16 @@ ShellCommandRunVol (
         }\r
       }\r
       if (PathName != NULL) {\r
-        StrnCatGrow(&FullPath, &Length, PathName, StrStr(PathName, L"\\")==NULL?0:StrStr(PathName, L"\\")-PathName+1);\r
-        if (StrStr(FullPath, L":\\") == NULL) {\r
-          StrnCatGrow(&FullPath, &Length, L":\\", 0);\r
+        TempSpot = StrStr(PathName, L":");\r
+        if (TempSpot != NULL) {\r
+          *TempSpot = CHAR_NULL;\r
+        }\r
+        TempSpot = StrStr(PathName, L"\\");\r
+        if (TempSpot != NULL) {\r
+          *TempSpot = CHAR_NULL;\r
         }\r
+        StrnCatGrow(&FullPath, &Length, PathName, 0);\r
+        StrnCatGrow(&FullPath, &Length, L":\\", 0);\r
         DeleteMode = ShellCommandLineGetFlag(Package, L"-d");\r
         if (DeleteMode && ShellCommandLineGetFlag(Package, L"-n")) {\r
           ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_PARAM_CON), gShellLevel2HiiHandle);\r