Revision: 17556
          http://sourceforge.net/p/edk2/code/17556
Author:   jcarsey
Date:     2015-06-03 20:34:48 +0000 (Wed, 03 Jun 2015)
Log Message:
-----------
ShellPkg: Handle escape characters properly for parse command

parse command does not remove escape character ^ if used to pass special 
characters like ^ , ?\226?\128?\156 in a quoted -sfo output string. 

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Tapan Shah <[email protected]>
Reviewed-by: Jaben Carsey <[email protected]>

Modified Paths:
--------------
    trunk/edk2/ShellPkg/Library/UefiShellLevel2CommandsLib/Parse.c

Modified: trunk/edk2/ShellPkg/Library/UefiShellLevel2CommandsLib/Parse.c
===================================================================
--- trunk/edk2/ShellPkg/Library/UefiShellLevel2CommandsLib/Parse.c      
2015-06-03 20:33:41 UTC (rev 17555)
+++ trunk/edk2/ShellPkg/Library/UefiShellLevel2CommandsLib/Parse.c      
2015-06-03 20:34:48 UTC (rev 17556)
@@ -189,6 +189,52 @@
 }
 
 /**
+  Handle stings for SFO Output with escape character ^ in a string
+  1. Quotation marks in the string must be escaped by using a ^ character 
(i.e. ^\x94). 
+  2. The ^ character may be inserted using ^^.
+
+  @param[in]  String  The Unicode NULL-terminated string.
+ 
+  @retval NewString   The new string handled for SFO.
+**/
+EFI_STRING
+HandleStringWithEscapeCharForParse (
+  IN      CHAR16  *String
+  )
+{
+  EFI_STRING  NewStr;
+  EFI_STRING  StrWalker;
+  EFI_STRING  ReturnStr;
+
+  if (String == NULL) {
+    return NULL;
+  }
+  
+  //
+  // start to parse the input string.
+  //
+  NewStr = AllocateZeroPool (StrSize (String));
+  if (NewStr == NULL) {
+    return NULL;
+  }
+  ReturnStr = NewStr;
+  StrWalker = String;
+  while (*StrWalker != CHAR_NULL) {
+    if (*StrWalker == L'^' && (*(StrWalker + 1) == L'^' || *(StrWalker + 1) == 
L'"')) {
+      *NewStr = *(StrWalker + 1);
+      StrWalker++;
+    } else {
+      *NewStr = *StrWalker;
+    }
+    StrWalker++;
+    NewStr++;
+  }
+  
+  return ReturnStr;
+}
+
+
+/**
   Do the actual parsing of the file.  the file should be SFO output from a 
   shell command or a similar format.
 
@@ -222,6 +268,7 @@
   CHAR16            *ColumnPointer;
   SHELL_STATUS      ShellStatus;
   CHAR16            *TempSpot;
+  CHAR16            *SfoString;
 
   ASSERT(FileName   != NULL);
   ASSERT(TableName  != NULL);
@@ -299,8 +346,11 @@
                 if (ColumnPointer != NULL && *ColumnPointer != CHAR_NULL && 
ColumnPointer[StrLen (ColumnPointer) - 1] == L'\"'){
                   ColumnPointer[StrLen (ColumnPointer) - 1] = CHAR_NULL;
                 }
-
-                ShellPrintEx (-1, -1, L"%s\r\n", ColumnPointer);
+                SfoString = HandleStringWithEscapeCharForParse (ColumnPointer);
+                if (SfoString != NULL) {
+                  ShellPrintEx (-1, -1, L"%s\r\n", SfoString);
+                  SHELL_FREE_NON_NULL (SfoString);
+                }
               }
             }
           }


------------------------------------------------------------------------------
_______________________________________________
edk2-commits mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/edk2-commits

Reply via email to