]> git.proxmox.com Git - mirror_edk2.git/commitdiff
rm - refine user input validation to prevent removal of CWD.
authorjcarsey <jcarsey@6f19259b-4bc3-4df7-8a09-765794883524>
Wed, 13 Apr 2011 23:37:21 +0000 (23:37 +0000)
committerjcarsey <jcarsey@6f19259b-4bc3-4df7-8a09-765794883524>
Wed, 13 Apr 2011 23:37:21 +0000 (23:37 +0000)
change colors of "set" command output.

git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@11538 6f19259b-4bc3-4df7-8a09-765794883524

ShellPkg/Library/UefiShellLevel2CommandsLib/Rm.c
ShellPkg/Library/UefiShellLevel2CommandsLib/UefiShellLevel2CommandsLib.uni

index ea3792a3be1fb8a33b44c623643e507f244ee974..32b7580103ff4641a1462b4040396fd5fd370372 100644 (file)
@@ -172,27 +172,51 @@ IsValidDeleteTarget(
   )\r
 {\r
   CONST CHAR16        *TempLocation;\r
-  CHAR16              *Temp2;\r
+  BOOLEAN             RetVal;\r
+  CHAR16              *SearchString;\r
+  CHAR16              *Pattern;\r
   UINTN               Size;\r
 \r
+  if (Node == NULL || Node->FullName == NULL) {\r
+    return (FALSE);\r
+  }\r
+\r
   TempLocation = StrStr(Node->FullName, L":");\r
-  if (StrLen(TempLocation) == 2) {\r
+  if (StrLen(TempLocation) <= 2) {\r
     //\r
     // Deleting the root directory is invalid.\r
     //\r
     return (FALSE);\r
   }\r
+\r
   TempLocation = ShellGetCurrentDir(NULL);\r
-  Size = 0;\r
-  Temp2 = NULL;\r
-  StrnCatGrow(&Temp2, &Size, TempLocation, 0);\r
-  if (StrStr(Temp2, Node->FullName) != NULL) {\r
-    FreePool(Temp2);\r
-    return (FALSE);\r
+  if (TempLocation == NULL) {\r
+    //\r
+    // No working directory is specified so whatever is left is ok.\r
+    //\r
+    return (TRUE);\r
   }\r
-  FreePool(Temp2);\r
 \r
-  return (TRUE);\r
+  Pattern       = NULL;\r
+  SearchString  = NULL;\r
+  Size          = 0;\r
+  Pattern       = StrnCatGrow(&Pattern     , NULL, TempLocation  , 0);\r
+  SearchString  = StrnCatGrow(&SearchString, &Size, Node->FullName, 0);\r
+  SearchString  = StrnCatGrow(&SearchString, &Size, L"*", 0);\r
+\r
+  if (Pattern == NULL || SearchString == NULL) {\r
+    RetVal = FALSE;\r
+  } else {\r
+    RetVal = TRUE;\r
+    if (gUnicodeCollation->MetaiMatch(gUnicodeCollation, Pattern, SearchString)) {\r
+      RetVal = FALSE;\r
+    }\r
+  }\r
+\r
+  SHELL_FREE_NON_NULL(Pattern     );\r
+  SHELL_FREE_NON_NULL(SearchString);\r
+\r
+  return (RetVal);\r
 }\r
 \r
 /**\r
index 428d8ddaecbd8fd4431b7cdba744f513d3a8d511..eaa7b2ba8fb4218824849f3623763afbdb603da0 100644 (file)
Binary files a/ShellPkg/Library/UefiShellLevel2CommandsLib/UefiShellLevel2CommandsLib.uni and b/ShellPkg/Library/UefiShellLevel2CommandsLib/UefiShellLevel2CommandsLib.uni differ