On 10/25/2018 2:03 AM, Carsey, Jaben wrote:
Looks good to me.
Ray?

Reviewed-by: Jaben Carsey <[email protected]>

Reviewed-by: Ruiyu Ni <[email protected]>


p.s. Ray if you agree you can RB and I will handle the push.

-----Original Message-----
From: edk2-devel [mailto:[email protected]] On Behalf Of
[email protected]
Sent: Wednesday, October 24, 2018 9:36 AM
To: [email protected]
Cc: Ni, Ruiyu <[email protected]>; Carsey, Jaben <[email protected]>
Subject: [edk2] [PATCH 2/2] ShellPkg-Shell App: Provide fully-qualified path
to shell scripts
Importance: High

Section 3.6.2 of version 2.2 of the shell specification requires that
the first positional argument (i.e. arg 0) of a shell script resolves
to "the full path name of the script itself."

Ensure that the startup script and any scripts launched by the shell
meet this requirement.

Contributed-under: TianoCore Contribution Agreement 1.1
Signed-off-by: Jim Dailey <[email protected]>
---
  ShellPkg/Application/Shell/Shell.c | 12 ++++++++++--
  1 file changed, 10 insertions(+), 2 deletions(-)

diff --git a/ShellPkg/Application/Shell/Shell.c
b/ShellPkg/Application/Shell/Shell.c
index 6185b6ac80..fe88177d57 100644
--- a/ShellPkg/Application/Shell/Shell.c
+++ b/ShellPkg/Application/Shell/Shell.c
@@ -3,6 +3,7 @@

    Copyright (c) 2009 - 2018, Intel Corporation. All rights reserved.<BR>
    (C) Copyright 2013-2014 Hewlett-Packard Development Company, L.P.<BR>
+  Copyright 2018 Dell Technologies.<BR>
    This program and the accompanying materials
    are licensed and made available under the terms and conditions of the BSD
License
    which accompanies this distribution.  The full text of the license may be
found at
@@ -1275,7 +1276,8 @@ DoStartupScript(

    FileStringPath = LocateStartupScript (ImagePath, FilePath);
    if (FileStringPath != NULL) {
-    Status = RunScriptFile (FileStringPath, NULL, L"",
ShellInfoObject.NewShellParametersProtocol);
+    FileStringPath = FullyQualifyPath(&FileStringPath);
+    Status = RunScriptFile (FileStringPath, NULL, FileStringPath,
ShellInfoObject.NewShellParametersProtocol);
      FreePool (FileStringPath);
    } else {
      //
@@ -2474,6 +2476,7 @@ RunCommandOrFile(
        }
        switch (Type) {
          case   Script_File_Name:
+          CommandWithPath = FullyQualifyPath(&CommandWithPath);
            Status = RunScriptFile (CommandWithPath, NULL, CmdLine,
ParamProtocol);
            break;
          case   Efi_Application:
@@ -2812,7 +2815,12 @@ RunScriptFileHandle (
        DeleteScriptFileStruct(NewScriptFile);
        return (EFI_OUT_OF_RESOURCES);
      }
-    for (LoopVar = 0 ; LoopVar < 10 && LoopVar < NewScriptFile->Argc;
LoopVar++) {
+    //
+    // Put the full path of the script file into Argv[0] as required by section
+    // 3.6.2 of version 2.2 of the shell specification.
+    //
+    NewScriptFile->Argv[0] = StrnCatGrow(&NewScriptFile->Argv[0], NULL,
NewScriptFile->ScriptName, 0);
+    for (LoopVar = 1 ; LoopVar < 10 && LoopVar < NewScriptFile->Argc;
LoopVar++) {
        ASSERT(NewScriptFile->Argv[LoopVar] == NULL);
        NewScriptFile->Argv[LoopVar] = StrnCatGrow(&NewScriptFile-
Argv[LoopVar], NULL, ShellInfoObject.NewShellParametersProtocol-
Argv[LoopVar], 0);
        if (NewScriptFile->Argv[LoopVar] == NULL) {
--
2.17.0.windows.1

_______________________________________________
edk2-devel mailing list
[email protected]
https://lists.01.org/mailman/listinfo/edk2-devel


--
Thanks,
Ray
_______________________________________________
edk2-devel mailing list
[email protected]
https://lists.01.org/mailman/listinfo/edk2-devel

Reply via email to