]> git.proxmox.com Git - mirror_edk2.git/blobdiff - ShellPkg/Library/UefiShellDebug1CommandsLib/HexEdit/HexEdit.c
pointer verification (not NULL) and buffer overrun fixes.
[mirror_edk2.git] / ShellPkg / Library / UefiShellDebug1CommandsLib / HexEdit / HexEdit.c
index 511eb9e6366e66d3b4f374dcb494afbc3a75aa39..53718c775138928d87c04622a553b2bc79c7d0a9 100644 (file)
@@ -44,7 +44,7 @@ ShellCommandRunHexEdit (
   SHELL_STATUS            ShellStatus;\r
   LIST_ENTRY              *Package;\r
   CONST CHAR16            *Cwd;\r
-  CHAR16                  *NFS;\r
+  CHAR16                  *NewName;\r
   CHAR16                  *Spot;\r
   CONST CHAR16            *Name;\r
   UINTN                   Offset;\r
@@ -54,7 +54,7 @@ ShellCommandRunHexEdit (
 \r
   Buffer      = NULL;\r
   ShellStatus = SHELL_SUCCESS;\r
-  NFS         = NULL;\r
+  NewName         = NULL;\r
   Cwd         = NULL;\r
   Buffer      = NULL;\r
   Name        = NULL;\r
@@ -90,10 +90,7 @@ ShellCommandRunHexEdit (
     // Check for -d\r
     //\r
     if (ShellCommandLineGetFlag(Package, L"-d")){\r
-      if (ShellCommandLineGetCount(Package) < 4) {\r
-        ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_TOO_FEW), gShellDebug1HiiHandle);\r
-        ShellStatus = SHELL_INVALID_PARAMETER;\r
-      } else if (ShellCommandLineGetCount(Package) > 4) {\r
+      if (ShellCommandLineGetCount(Package) > 4) {\r
         ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_TOO_MANY), gShellDebug1HiiHandle);\r
         ShellStatus = SHELL_INVALID_PARAMETER;\r
       } else {\r
@@ -113,7 +110,7 @@ ShellCommandRunHexEdit (
         ShellStatus = SHELL_INVALID_PARAMETER;\r
       } else {\r
         Name      = ShellCommandLineGetRawValue(Package, 1);\r
-        if (!IsValidFileName(Name)) {\r
+        if (Name == NULL || !IsValidFileName(Name)) {\r
           ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_PROBLEM), gShellDebug1HiiHandle, Name);\r
           ShellStatus = SHELL_INVALID_PARAMETER;\r
         } else {\r
@@ -138,7 +135,24 @@ ShellCommandRunHexEdit (
         Size    = ShellStrToUintn(ShellCommandLineGetRawValue(Package, 2));\r
       }\r
     }\r
-    ShellCommandLineFreeVarList (Package);\r
+    if (WhatToDo == FileTypeNone && ShellCommandLineGetRawValue(Package, 1) != NULL) {\r
+        Name      = ShellCommandLineGetRawValue(Package, 1);\r
+        if (!IsValidFileName(Name)) {\r
+          ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_PROBLEM), gShellDebug1HiiHandle, Name);\r
+          ShellStatus = SHELL_INVALID_PARAMETER;\r
+        } else {\r
+          WhatToDo  = FileTypeFileBuffer;\r
+        }\r
+    } else if (WhatToDo == FileTypeNone) {\r
+      if (gEfiShellProtocol->GetCurDir(NULL) == NULL) {\r
+        ShellStatus = SHELL_NOT_FOUND;\r
+        ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_NO_CWD), gShellDebug1HiiHandle);\r
+      } else {\r
+        NewName = EditGetDefaultFileName(L"bin");\r
+        Name = NewName;\r
+        WhatToDo  = FileTypeFileBuffer;\r
+      }\r
+    }\r
 \r
     if (ShellStatus == SHELL_SUCCESS && WhatToDo == FileTypeNone) {\r
       ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_TOO_FEW), gShellDebug1HiiHandle);\r
@@ -240,8 +254,10 @@ ShellCommandRunHexEdit (
         }\r
       }\r
     }\r
+    ShellCommandLineFreeVarList (Package);\r
   }\r
 \r
   SHELL_FREE_NON_NULL (Buffer);\r
+  SHELL_FREE_NON_NULL (NewName);\r
   return ShellStatus;\r
 }\r