]> git.proxmox.com Git - mirror_edk2.git/commitdiff
ShellPkg: Check the unrecognized environment variable name before it is removed from...
authorQiu Shumin <shumin.qiu@intel.com>
Wed, 31 Dec 2014 01:31:00 +0000 (01:31 +0000)
committershenshushi <shenshushi@Edk2>
Wed, 31 Dec 2014 01:31:00 +0000 (01:31 +0000)
Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Qiu Shumin <shumin.qiu@intel.com>
Reviewed-by: Jaben Carsey <Jaben.carsey@intel.com>
git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@16563 6f19259b-4bc3-4df7-8a09-765794883524

ShellPkg/Application/Shell/Shell.c

index de46a72b44339469f6cdea0a223f600b7391e8b4..695880197b0b362fd4f6c34c655d101ec7768767 100644 (file)
@@ -142,6 +142,53 @@ FindNextInstance(
   return (Temp);\r
 }\r
 \r
+/**\r
+  Check whether the string between a pair of % is a valid envifronment variable name.\r
+\r
+  @param[in] BeginPercent       pointer to the first percent.\r
+  @param[in] EndPercent          pointer to the last percent.\r
+\r
+  @retval TRUE                          is a valid environment variable name.\r
+  @retval FALSE                         is NOT a valid environment variable name.\r
+**/\r
+BOOLEAN\r
+IsValidEnvironmentVariableName(\r
+  IN CONST CHAR16     *BeginPercent,\r
+  IN CONST CHAR16     *EndPercent\r
+  )\r
+{\r
+  CONST CHAR16    *Walker;\r
+  \r
+  Walker = NULL;\r
+\r
+  ASSERT (BeginPercent != NULL);\r
+  ASSERT (EndPercent != NULL);\r
+  ASSERT (BeginPercent < EndPercent);\r
+  \r
+  if ((BeginPercent + 1) == EndPercent) {\r
+    return FALSE;\r
+  }\r
+\r
+  for (Walker = BeginPercent + 1; Walker < EndPercent; Walker++) {\r
+    if (\r
+        (*Walker >= L'0' && *Walker <= L'9') ||\r
+        (*Walker >= L'A' && *Walker <= L'Z') ||\r
+        (*Walker >= L'a' && *Walker <= L'z') ||\r
+        (*Walker == L'_')\r
+      ) {\r
+      if (Walker == BeginPercent + 1 && (*Walker >= L'0' && *Walker <= L'9')) {\r
+        return FALSE;\r
+      } else {\r
+        continue;\r
+      }\r
+    } else {\r
+      return FALSE;\r
+    }\r
+  }\r
+\r
+  return TRUE;\r
+}\r
+\r
 /**\r
   Find a command line contains a split operation\r
 \r
@@ -1355,14 +1402,17 @@ StripUnreplacedEnvironmentVariables(
     }\r
     ASSERT(FirstPercent < FirstQuote);\r
     if (SecondPercent < FirstQuote) {\r
-      FirstPercent[0] = L'\"';\r
-      SecondPercent[0] = L'\"';\r
-\r
-      //\r
-      // We need to remove from FirstPercent to SecondPercent\r
-      //\r
-      CopyMem(FirstPercent + 1, SecondPercent, StrSize(SecondPercent));\r
-      CurrentLocator = FirstPercent + 2;\r
+      if (IsValidEnvironmentVariableName(FirstPercent, SecondPercent)) {\r
+        //\r
+        // We need to remove from FirstPercent to SecondPercent\r
+        //\r
+        CopyMem(FirstPercent, SecondPercent + 1, StrSize(SecondPercent + 1));\r
+        //\r
+        // dont need to update the locator.  both % characters are gone.\r
+        //\r
+      } else {\r
+        CurrentLocator = SecondPercent + 1;\r
+      }\r
       continue;\r
     }\r
     ASSERT(FirstQuote < SecondPercent);\r