]> git.proxmox.com Git - mirror_edk2.git/commitdiff
ShellPkg/set: Fix EfiShellSetEnv to use case sensitive compare
authorRuiyu Ni <ruiyu.ni@intel.com>
Tue, 7 Aug 2018 09:13:07 +0000 (17:13 +0800)
committerRuiyu Ni <ruiyu.ni@intel.com>
Thu, 16 Aug 2018 03:38:27 +0000 (11:38 +0800)
REF: https://bugzilla.tianocore.org/show_bug.cgi?id=777

Per Shell spec, the environment variable has a case-sensitive name.
But today's implementation of EfiShellSetEnv() compares the
environment variable name case insensitively, which causes variable
like "CWD" cannot be set due to "cwd" is pre-defined variable.

The patch fixes this issue.

The EfiShellGetEnv() doesn't have such issue because it will
call into ShellFindEnvVarInList() which uses StrCmp().

Contributed-under: TianoCore Contribution Agreement 1.1
Signed-off-by: Ruiyu Ni <ruiyu.ni@intel.com>
Reviewed-by: Jaben Carsey <jaben.carsey@intel.com>
Reviewed-by: Jim Dailey <jim_dailey@dell.com>
ShellPkg/Application/Shell/ShellProtocol.c

index f2ca2029e368f61cb17e77b7c9d7fbc919a4c177..9e9e6dc052bdb0b4dbed4e85773ee4b9e519af94 100644 (file)
@@ -2924,36 +2924,15 @@ EfiShellSetEnv(
   //\r
   // Make sure we dont 'set' a predefined read only variable\r
   //\r
-  if (gUnicodeCollation->StriColl(\r
-        gUnicodeCollation,\r
-        (CHAR16*)Name,\r
-        L"cwd") == 0\r
-    ||gUnicodeCollation->StriColl(\r
-        gUnicodeCollation,\r
-        (CHAR16*)Name,\r
-        L"Lasterror") == 0\r
-    ||gUnicodeCollation->StriColl(\r
-        gUnicodeCollation,\r
-        (CHAR16*)Name,\r
-        L"profiles") == 0\r
-    ||gUnicodeCollation->StriColl(\r
-        gUnicodeCollation,\r
-        (CHAR16*)Name,\r
-        L"uefishellsupport") == 0\r
-    ||gUnicodeCollation->StriColl(\r
-        gUnicodeCollation,\r
-        (CHAR16*)Name,\r
-        L"uefishellversion") == 0\r
-    ||gUnicodeCollation->StriColl(\r
-        gUnicodeCollation,\r
-        (CHAR16*)Name,\r
-        L"uefiversion") == 0\r
-    ||(!ShellInfoObject.ShellInitSettings.BitUnion.Bits.NoNest &&\r
-      gUnicodeCollation->StriColl(\r
-        gUnicodeCollation,\r
-        (CHAR16*)Name,\r
-        (CHAR16*)mNoNestingEnvVarName) == 0)\r
-       ){\r
+  if ((StrCmp (Name, L"cwd") == 0) ||\r
+      (StrCmp (Name, L"lasterror") == 0) ||\r
+      (StrCmp (Name, L"profiles") == 0) ||\r
+      (StrCmp (Name, L"uefishellsupport") == 0) ||\r
+      (StrCmp (Name, L"uefishellversion") == 0) ||\r
+      (StrCmp (Name, L"uefiversion") == 0) ||\r
+      (!ShellInfoObject.ShellInitSettings.BitUnion.Bits.NoNest &&\r
+       StrCmp (Name, mNoNestingEnvVarName) == 0)\r
+     ) {\r
     return (EFI_INVALID_PARAMETER);\r
   }\r
   return (InternalEfiShellSetEnv(Name, Value, Volatile));\r