diff options
author | Ruiyu Ni <ruiyu.ni@intel.com> | 2018-08-07 17:13:07 +0800 |
---|---|---|
committer | Ruiyu Ni <ruiyu.ni@intel.com> | 2018-08-16 11:38:27 +0800 |
commit | 0e967dff0642cedaef7bc63e5743f4b081a1db9a (patch) | |
tree | b3c0afeeef96f699ade3f493c9ad97be5ca51f40 /ShellPkg/Application | |
parent | 855698fb69fdb85fa24c4374d07947106f4de828 (diff) | |
download | edk2-0e967dff0642cedaef7bc63e5743f4b081a1db9a.zip edk2-0e967dff0642cedaef7bc63e5743f4b081a1db9a.tar.gz edk2-0e967dff0642cedaef7bc63e5743f4b081a1db9a.tar.bz2 |
ShellPkg/set: Fix EfiShellSetEnv to use case sensitive compare
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>
Diffstat (limited to 'ShellPkg/Application')
-rw-r--r-- | ShellPkg/Application/Shell/ShellProtocol.c | 39 |
1 files changed, 9 insertions, 30 deletions
diff --git a/ShellPkg/Application/Shell/ShellProtocol.c b/ShellPkg/Application/Shell/ShellProtocol.c index f2ca202..9e9e6dc 100644 --- a/ShellPkg/Application/Shell/ShellProtocol.c +++ b/ShellPkg/Application/Shell/ShellProtocol.c @@ -2924,36 +2924,15 @@ EfiShellSetEnv( //
// Make sure we dont 'set' a predefined read only variable
//
- if (gUnicodeCollation->StriColl(
- gUnicodeCollation,
- (CHAR16*)Name,
- L"cwd") == 0
- ||gUnicodeCollation->StriColl(
- gUnicodeCollation,
- (CHAR16*)Name,
- L"Lasterror") == 0
- ||gUnicodeCollation->StriColl(
- gUnicodeCollation,
- (CHAR16*)Name,
- L"profiles") == 0
- ||gUnicodeCollation->StriColl(
- gUnicodeCollation,
- (CHAR16*)Name,
- L"uefishellsupport") == 0
- ||gUnicodeCollation->StriColl(
- gUnicodeCollation,
- (CHAR16*)Name,
- L"uefishellversion") == 0
- ||gUnicodeCollation->StriColl(
- gUnicodeCollation,
- (CHAR16*)Name,
- L"uefiversion") == 0
- ||(!ShellInfoObject.ShellInitSettings.BitUnion.Bits.NoNest &&
- gUnicodeCollation->StriColl(
- gUnicodeCollation,
- (CHAR16*)Name,
- (CHAR16*)mNoNestingEnvVarName) == 0)
- ){
+ if ((StrCmp (Name, L"cwd") == 0) ||
+ (StrCmp (Name, L"lasterror") == 0) ||
+ (StrCmp (Name, L"profiles") == 0) ||
+ (StrCmp (Name, L"uefishellsupport") == 0) ||
+ (StrCmp (Name, L"uefishellversion") == 0) ||
+ (StrCmp (Name, L"uefiversion") == 0) ||
+ (!ShellInfoObject.ShellInitSettings.BitUnion.Bits.NoNest &&
+ StrCmp (Name, mNoNestingEnvVarName) == 0)
+ ) {
return (EFI_INVALID_PARAMETER);
}
return (InternalEfiShellSetEnv(Name, Value, Volatile));
|