components/apr/patches/CVE-2011-1928.patch
author Mike Sullivan <Mike.Sullivan@Oracle.COM>
Mon, 11 Mar 2013 10:38:09 -0700
branchs11-update
changeset 2520 ceec631e74d1
parent 472 b4bf6ad34a2d
permissions -rw-r--r--
Close of build 10.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
472
b4bf6ad34a2d 7049240 Problem with utility/apache
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
     1
b4bf6ad34a2d 7049240 Problem with utility/apache
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
     2
Fix regressions in fnmatch rewrite.
b4bf6ad34a2d 7049240 Problem with utility/apache
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
     3
b4bf6ad34a2d 7049240 Problem with utility/apache
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
     4
https://bugzilla.redhat.com/show_bug.cgi?id=706203
b4bf6ad34a2d 7049240 Problem with utility/apache
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
     5
b4bf6ad34a2d 7049240 Problem with utility/apache
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
     6
http://svn.apache.org/viewvc/apr/apr/branches/1.4.x/strings/apr_fnmatch.c?r1=1098902&r2=1124999
b4bf6ad34a2d 7049240 Problem with utility/apache
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
     7
b4bf6ad34a2d 7049240 Problem with utility/apache
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
     8
--- strings/apr_fnmatch.c.fnmatch
b4bf6ad34a2d 7049240 Problem with utility/apache
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
     9
+++ strings/apr_fnmatch.c
b4bf6ad34a2d 7049240 Problem with utility/apache
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    10
@@ -90,10 +90,13 @@ static APR_INLINE int fnmatch_ch(const c
b4bf6ad34a2d 7049240 Problem with utility/apache
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    11
         if (negate)
b4bf6ad34a2d 7049240 Problem with utility/apache
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    12
             ++*pattern;
b4bf6ad34a2d 7049240 Problem with utility/apache
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    13
 
b4bf6ad34a2d 7049240 Problem with utility/apache
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    14
+        /* ']' is an ordinary character at the start of the range pattern */
b4bf6ad34a2d 7049240 Problem with utility/apache
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    15
+        if (**pattern == ']')
b4bf6ad34a2d 7049240 Problem with utility/apache
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    16
+            goto leadingclosebrace;
b4bf6ad34a2d 7049240 Problem with utility/apache
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    17
+
b4bf6ad34a2d 7049240 Problem with utility/apache
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    18
         while (**pattern)
b4bf6ad34a2d 7049240 Problem with utility/apache
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    19
         {
b4bf6ad34a2d 7049240 Problem with utility/apache
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    20
-            /* ']' is an ordinary character at the start of the range pattern */
b4bf6ad34a2d 7049240 Problem with utility/apache
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    21
-            if ((**pattern == ']') && (*pattern > mismatch)) {
b4bf6ad34a2d 7049240 Problem with utility/apache
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    22
+            if (**pattern == ']') {
b4bf6ad34a2d 7049240 Problem with utility/apache
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    23
                 ++*pattern;
b4bf6ad34a2d 7049240 Problem with utility/apache
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    24
                 /* XXX: Fix for MBCS character width */
b4bf6ad34a2d 7049240 Problem with utility/apache
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    25
                 ++*string;
b4bf6ad34a2d 7049240 Problem with utility/apache
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    26
@@ -112,17 +115,23 @@ static APR_INLINE int fnmatch_ch(const c
b4bf6ad34a2d 7049240 Problem with utility/apache
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    27
             if (slash && (**pattern == '/'))
b4bf6ad34a2d 7049240 Problem with utility/apache
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    28
                 break;
b4bf6ad34a2d 7049240 Problem with utility/apache
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    29
 
b4bf6ad34a2d 7049240 Problem with utility/apache
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    30
-            /* Look at only well-formed range patterns; ']' is allowed only if escaped,
b4bf6ad34a2d 7049240 Problem with utility/apache
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    31
-             * while '/' is not allowed at all in FNM_PATHNAME mode.
b4bf6ad34a2d 7049240 Problem with utility/apache
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    32
+leadingclosebrace:
b4bf6ad34a2d 7049240 Problem with utility/apache
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    33
+            /* Look at only well-formed range patterns; 
b4bf6ad34a2d 7049240 Problem with utility/apache
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    34
+             * "x-]" is not allowed unless escaped ("x-\]")
b4bf6ad34a2d 7049240 Problem with utility/apache
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    35
+             * XXX: Fix for locale/MBCS character width
b4bf6ad34a2d 7049240 Problem with utility/apache
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    36
              */
b4bf6ad34a2d 7049240 Problem with utility/apache
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    37
-            /* XXX: Fix for locale/MBCS character width */
b4bf6ad34a2d 7049240 Problem with utility/apache
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    38
-            if (((*pattern)[1] == '-') && (*pattern)[2] 
b4bf6ad34a2d 7049240 Problem with utility/apache
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    39
-                    && ((escape && ((*pattern)[2] != '\\'))
b4bf6ad34a2d 7049240 Problem with utility/apache
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    40
-                          ? (((*pattern)[2] != ']') && (!slash || ((*pattern)[2] != '/')))
b4bf6ad34a2d 7049240 Problem with utility/apache
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    41
-                          : (((*pattern)[3]) && (!slash || ((*pattern)[3] != '/'))))) {
b4bf6ad34a2d 7049240 Problem with utility/apache
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    42
+            if (((*pattern)[1] == '-') && ((*pattern)[2] != ']'))
b4bf6ad34a2d 7049240 Problem with utility/apache
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    43
+            {
b4bf6ad34a2d 7049240 Problem with utility/apache
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    44
                 startch = *pattern;
b4bf6ad34a2d 7049240 Problem with utility/apache
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    45
                 *pattern += (escape && ((*pattern)[2] == '\\')) ? 3 : 2;
b4bf6ad34a2d 7049240 Problem with utility/apache
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    46
 
b4bf6ad34a2d 7049240 Problem with utility/apache
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    47
+                /* NOT a properly balanced [expr] pattern, EOS terminated 
b4bf6ad34a2d 7049240 Problem with utility/apache
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    48
+                 * or ranges containing a slash in FNM_PATHNAME mode pattern
b4bf6ad34a2d 7049240 Problem with utility/apache
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    49
+                 * fall out to to the rewind and test '[' literal code path
b4bf6ad34a2d 7049240 Problem with utility/apache
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    50
+                 */
b4bf6ad34a2d 7049240 Problem with utility/apache
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    51
+                if (!**pattern || (slash && (**pattern == '/')))
b4bf6ad34a2d 7049240 Problem with utility/apache
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    52
+                    break;
b4bf6ad34a2d 7049240 Problem with utility/apache
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    53
+
b4bf6ad34a2d 7049240 Problem with utility/apache
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    54
                 /* XXX: handle locale/MBCS comparison, advance by MBCS char width */
b4bf6ad34a2d 7049240 Problem with utility/apache
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    55
                 if ((**string >= *startch) && (**string <= **pattern))
b4bf6ad34a2d 7049240 Problem with utility/apache
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    56
                     result = 0;
b4bf6ad34a2d 7049240 Problem with utility/apache
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    57
@@ -146,7 +155,9 @@ static APR_INLINE int fnmatch_ch(const c
b4bf6ad34a2d 7049240 Problem with utility/apache
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    58
             ++*pattern;
b4bf6ad34a2d 7049240 Problem with utility/apache
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    59
         }
b4bf6ad34a2d 7049240 Problem with utility/apache
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    60
 
b4bf6ad34a2d 7049240 Problem with utility/apache
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    61
-        /* NOT a properly balanced [expr] pattern; Rewind to test '[' literal */
b4bf6ad34a2d 7049240 Problem with utility/apache
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    62
+        /* NOT a properly balanced [expr] pattern; Rewind
b4bf6ad34a2d 7049240 Problem with utility/apache
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    63
+         * and reset result to test '[' literal
b4bf6ad34a2d 7049240 Problem with utility/apache
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    64
+         */
b4bf6ad34a2d 7049240 Problem with utility/apache
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    65
         *pattern = mismatch;
b4bf6ad34a2d 7049240 Problem with utility/apache
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    66
         result = APR_FNM_NOMATCH;
b4bf6ad34a2d 7049240 Problem with utility/apache
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    67
     }
b4bf6ad34a2d 7049240 Problem with utility/apache
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    68
@@ -196,9 +207,13 @@ APR_DECLARE(int) apr_fnmatch(const char 
b4bf6ad34a2d 7049240 Problem with utility/apache
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    69
     const char *mismatch = NULL;
b4bf6ad34a2d 7049240 Problem with utility/apache
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    70
     int matchlen = 0;
b4bf6ad34a2d 7049240 Problem with utility/apache
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    71
 
b4bf6ad34a2d 7049240 Problem with utility/apache
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    72
-    while (*pattern)
b4bf6ad34a2d 7049240 Problem with utility/apache
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    73
+    if (*pattern == '*')
b4bf6ad34a2d 7049240 Problem with utility/apache
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    74
+        goto firstsegment;
b4bf6ad34a2d 7049240 Problem with utility/apache
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    75
+
b4bf6ad34a2d 7049240 Problem with utility/apache
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    76
+    while (*pattern && *string)
b4bf6ad34a2d 7049240 Problem with utility/apache
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    77
     {
b4bf6ad34a2d 7049240 Problem with utility/apache
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    78
-        /* Match balanced slashes, starting a new segment pattern
b4bf6ad34a2d 7049240 Problem with utility/apache
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    79
+        /* Pre-decode "\/" which has no special significance, and
b4bf6ad34a2d 7049240 Problem with utility/apache
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    80
+         * match balanced slashes, starting a new segment pattern
b4bf6ad34a2d 7049240 Problem with utility/apache
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    81
          */
b4bf6ad34a2d 7049240 Problem with utility/apache
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    82
         if (slash && escape && (*pattern == '\\') && (pattern[1] == '/'))
b4bf6ad34a2d 7049240 Problem with utility/apache
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    83
             ++pattern;
b4bf6ad34a2d 7049240 Problem with utility/apache
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    84
@@ -207,6 +222,7 @@ APR_DECLARE(int) apr_fnmatch(const char 
b4bf6ad34a2d 7049240 Problem with utility/apache
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    85
             ++string;
b4bf6ad34a2d 7049240 Problem with utility/apache
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    86
         }            
b4bf6ad34a2d 7049240 Problem with utility/apache
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    87
 
b4bf6ad34a2d 7049240 Problem with utility/apache
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    88
+firstsegment:
b4bf6ad34a2d 7049240 Problem with utility/apache
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    89
         /* At the beginning of each segment, validate leading period behavior.
b4bf6ad34a2d 7049240 Problem with utility/apache
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    90
          */
b4bf6ad34a2d 7049240 Problem with utility/apache
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    91
         if ((flags & APR_FNM_PERIOD) && (*string == '.'))
b4bf6ad34a2d 7049240 Problem with utility/apache
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    92
@@ -235,12 +251,17 @@ APR_DECLARE(int) apr_fnmatch(const char 
b4bf6ad34a2d 7049240 Problem with utility/apache
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    93
 
b4bf6ad34a2d 7049240 Problem with utility/apache
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    94
         /* Allow pattern '*' to be consumed even with no remaining string to match
b4bf6ad34a2d 7049240 Problem with utility/apache
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    95
          */
b4bf6ad34a2d 7049240 Problem with utility/apache
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    96
-        while (*pattern && !(slash && ((*pattern == '/')
b4bf6ad34a2d 7049240 Problem with utility/apache
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    97
-                                       || (escape && (*pattern == '\\')
b4bf6ad34a2d 7049240 Problem with utility/apache
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    98
-                                                  && (pattern[1] == '/'))))
b4bf6ad34a2d 7049240 Problem with utility/apache
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    99
-                        && ((string < strendseg)
b4bf6ad34a2d 7049240 Problem with utility/apache
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
   100
-                            || ((*pattern == '*') && (string == strendseg))))
b4bf6ad34a2d 7049240 Problem with utility/apache
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
   101
+        while (*pattern)
b4bf6ad34a2d 7049240 Problem with utility/apache
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
   102
         {
b4bf6ad34a2d 7049240 Problem with utility/apache
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
   103
+            if ((string > strendseg)
b4bf6ad34a2d 7049240 Problem with utility/apache
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
   104
+                || ((string == strendseg) && (*pattern != '*')))
b4bf6ad34a2d 7049240 Problem with utility/apache
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
   105
+                break;
b4bf6ad34a2d 7049240 Problem with utility/apache
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
   106
+
b4bf6ad34a2d 7049240 Problem with utility/apache
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
   107
+            if (slash && ((*pattern == '/')
b4bf6ad34a2d 7049240 Problem with utility/apache
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
   108
+                           || (escape && (*pattern == '\\')
b4bf6ad34a2d 7049240 Problem with utility/apache
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
   109
+                                      && (pattern[1] == '/'))))
b4bf6ad34a2d 7049240 Problem with utility/apache
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
   110
+                break;
b4bf6ad34a2d 7049240 Problem with utility/apache
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
   111
+
b4bf6ad34a2d 7049240 Problem with utility/apache
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
   112
             /* Reduce groups of '*' and '?' to n '?' matches
b4bf6ad34a2d 7049240 Problem with utility/apache
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
   113
              * followed by one '*' test for simplicity
b4bf6ad34a2d 7049240 Problem with utility/apache
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
   114
              */
b4bf6ad34a2d 7049240 Problem with utility/apache
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
   115
@@ -324,9 +345,10 @@ APR_DECLARE(int) apr_fnmatch(const char 
b4bf6ad34a2d 7049240 Problem with utility/apache
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
   116
                 if (*pattern == '*')
b4bf6ad34a2d 7049240 Problem with utility/apache
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
   117
                     break;
b4bf6ad34a2d 7049240 Problem with utility/apache
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
   118
 
b4bf6ad34a2d 7049240 Problem with utility/apache
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
   119
-                if (slash && ((*string == '/') || (*pattern == '/')
b4bf6ad34a2d 7049240 Problem with utility/apache
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
   120
-                                               || (escape && (*pattern == '\\')
b4bf6ad34a2d 7049240 Problem with utility/apache
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
   121
-                                                   && (pattern[1] == '/'))))
b4bf6ad34a2d 7049240 Problem with utility/apache
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
   122
+                if (slash && ((*string == '/')
b4bf6ad34a2d 7049240 Problem with utility/apache
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
   123
+                              || (*pattern == '/')
b4bf6ad34a2d 7049240 Problem with utility/apache
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
   124
+                              || (escape && (*pattern == '\\')
b4bf6ad34a2d 7049240 Problem with utility/apache
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
   125
+                                         && (pattern[1] == '/'))))
b4bf6ad34a2d 7049240 Problem with utility/apache
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
   126
                     break;
b4bf6ad34a2d 7049240 Problem with utility/apache
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
   127
 
b4bf6ad34a2d 7049240 Problem with utility/apache
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
   128
                 /* Compare ch's (the pattern is advanced over "\/" to the '/',
b4bf6ad34a2d 7049240 Problem with utility/apache
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
   129
@@ -352,18 +374,18 @@ APR_DECLARE(int) apr_fnmatch(const char 
b4bf6ad34a2d 7049240 Problem with utility/apache
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
   130
             }
b4bf6ad34a2d 7049240 Problem with utility/apache
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
   131
         }
b4bf6ad34a2d 7049240 Problem with utility/apache
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
   132
 
b4bf6ad34a2d 7049240 Problem with utility/apache
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
   133
-        if (*string && (!slash || (*string != '/')))
b4bf6ad34a2d 7049240 Problem with utility/apache
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
   134
+        if (*string && !(slash && (*string == '/')))
b4bf6ad34a2d 7049240 Problem with utility/apache
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
   135
             return APR_FNM_NOMATCH;
b4bf6ad34a2d 7049240 Problem with utility/apache
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
   136
 
b4bf6ad34a2d 7049240 Problem with utility/apache
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
   137
-        if (*pattern && (!slash || ((*pattern != '/')
b4bf6ad34a2d 7049240 Problem with utility/apache
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
   138
-                                    && (!escape || (*pattern != '\\')
b4bf6ad34a2d 7049240 Problem with utility/apache
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
   139
-                                                || (pattern[1] != '/')))))
b4bf6ad34a2d 7049240 Problem with utility/apache
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
   140
+        if (*pattern && !(slash && ((*pattern == '/')
b4bf6ad34a2d 7049240 Problem with utility/apache
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
   141
+                                    || (escape && (*pattern == '\\')
b4bf6ad34a2d 7049240 Problem with utility/apache
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
   142
+                                               && (pattern[1] == '/')))))
b4bf6ad34a2d 7049240 Problem with utility/apache
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
   143
             return APR_FNM_NOMATCH;
b4bf6ad34a2d 7049240 Problem with utility/apache
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
   144
     }
b4bf6ad34a2d 7049240 Problem with utility/apache
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
   145
 
b4bf6ad34a2d 7049240 Problem with utility/apache
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
   146
-    /* pattern is at EOS; if string is also, declare success
b4bf6ad34a2d 7049240 Problem with utility/apache
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
   147
+    /* Where both pattern and string are at EOS, declare success
b4bf6ad34a2d 7049240 Problem with utility/apache
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
   148
      */
b4bf6ad34a2d 7049240 Problem with utility/apache
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
   149
-    if (!*string)
b4bf6ad34a2d 7049240 Problem with utility/apache
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
   150
+    if (!*string && !*pattern)
b4bf6ad34a2d 7049240 Problem with utility/apache
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
   151
         return 0;
b4bf6ad34a2d 7049240 Problem with utility/apache
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
   152
 
b4bf6ad34a2d 7049240 Problem with utility/apache
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
   153
     /* pattern didn't match to the end of string */