You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@apr.apache.org by wr...@apache.org on 2011/05/18 18:27:46 UTC

svn commit: r1124326 - /apr/apr/trunk/strings/apr_fnmatch.c

Author: wrowe
Date: Wed May 18 16:27:46 2011
New Revision: 1124326

URL: http://svn.apache.org/viewvc?rev=1124326&view=rev
Log:
Fix PR 51219, /foo against /foo/bar.

Modified:
    apr/apr/trunk/strings/apr_fnmatch.c

Modified: apr/apr/trunk/strings/apr_fnmatch.c
URL: http://svn.apache.org/viewvc/apr/apr/trunk/strings/apr_fnmatch.c?rev=1124326&r1=1124325&r2=1124326&view=diff
==============================================================================
--- apr/apr/trunk/strings/apr_fnmatch.c (original)
+++ apr/apr/trunk/strings/apr_fnmatch.c Wed May 18 16:27:46 2011
@@ -207,7 +207,10 @@ APR_DECLARE(int) apr_fnmatch(const char 
     const char *mismatch = NULL;
     int matchlen = 0;
 
-    while (*pattern)
+    if (*pattern == '*')
+        goto firstsegment;
+
+    while (*pattern && *string)
     {
         /* Pre-decode "\/" which has no special significance, and
          * match balanced slashes, starting a new segment pattern
@@ -219,6 +222,7 @@ APR_DECLARE(int) apr_fnmatch(const char 
             ++string;
         }            
 
+firstsegment:
         /* At the beginning of each segment, validate leading period behavior.
          */
         if ((flags & APR_FNM_PERIOD) && (*string == '.'))
@@ -379,9 +383,9 @@ APR_DECLARE(int) apr_fnmatch(const char 
             return APR_FNM_NOMATCH;
     }
 
-    /* pattern is at EOS; if string is also, declare success
+    /* Where both pattern and string are at EOS, declare success
      */
-    if (!*string)
+    if (!*string && !*pattern)
         return 0;
 
     /* pattern didn't match to the end of string */