Fix bugs in StrStr() and AsciiStrStr().
authorrsun3 <rsun3@6f19259b-4bc3-4df7-8a09-765794883524>
Fri, 8 May 2009 05:22:17 +0000 (05:22 +0000)
committerrsun3 <rsun3@6f19259b-4bc3-4df7-8a09-765794883524>
Fri, 8 May 2009 05:22:17 +0000 (05:22 +0000)
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@8261 6f19259b-4bc3-4df7-8a09-765794883524

MdePkg/Library/BaseLib/String.c

index 6717308..50253de 100644 (file)
@@ -478,29 +478,29 @@ StrStr (
   ASSERT (StrSize (String) != 0);\r
   ASSERT (StrSize (SearchString) != 0);\r
 \r
-  while (*String != '\0') {\r
+  if (*SearchString == L'\0') {\r
+    return NULL;\r
+  }\r
+\r
+  while (*String != L'\0') {\r
     SearchStringTmp = SearchString;\r
     FirstMatch = String;\r
     \r
     while ((*String == *SearchStringTmp) \r
-            && (*SearchStringTmp != '\0') \r
-            && (*String != '\0')) {\r
+            && (*String != L'\0')) {\r
       String++;\r
       SearchStringTmp++;\r
     } \r
     \r
-    if (*SearchStringTmp == '\0') {\r
+    if (*SearchStringTmp == L'\0') {\r
       return (CHAR16 *) FirstMatch;\r
     }\r
 \r
-    if (SearchStringTmp == SearchString) {\r
-      //\r
-      // If no character from SearchString match,\r
-      // move the pointer to the String under search\r
-      // by one character.\r
-      //\r
-      String++;\r
+    if (*String == L'\0') {\r
+      return NULL;\r
     }\r
+\r
+    String = FirstMatch + 1;\r
   }\r
 \r
   return NULL;\r
@@ -1616,12 +1616,15 @@ AsciiStrStr (
   ASSERT (AsciiStrSize (String) != 0);\r
   ASSERT (AsciiStrSize (SearchString) != 0);\r
 \r
+  if (*SearchString == '\0') {\r
+    return NULL;\r
+  }\r
+\r
   while (*String != '\0') {\r
     SearchStringTmp = SearchString;\r
     FirstMatch = String;\r
     \r
     while ((*String == *SearchStringTmp) \r
-            && (*SearchStringTmp != '\0') \r
             && (*String != '\0')) {\r
       String++;\r
       SearchStringTmp++;\r
@@ -1631,15 +1634,11 @@ AsciiStrStr (
       return (CHAR8 *) FirstMatch;\r
     }\r
 \r
-    if (SearchStringTmp == SearchString) {\r
-      //\r
-      // If no character from SearchString match,\r
-      // move the pointer to the String under search\r
-      // by one character.\r
-      //\r
-      String++;\r
+    if (*String == '\0') {\r
+      return NULL;\r
     }\r
 \r
+    String = FirstMatch + 1;\r
   }\r
 \r
   return NULL;\r