]> granicus.if.org Git - apache/commitdiff
Follow up to r1609680: further simplify/optimize ap_proxy_strcmp_ematch().
authorYann Ylavic <ylavic@apache.org>
Fri, 9 Mar 2018 09:36:18 +0000 (09:36 +0000)
committerYann Ylavic <ylavic@apache.org>
Fri, 9 Mar 2018 09:36:18 +0000 (09:36 +0000)
While at it, same treatment for its mother ap_strcmp_match().

git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1826313 13f79535-47bb-0310-9956-ffa450edef68

modules/proxy/proxy_util.c
server/util.c

index 0a88c5bac74b9dcf5e0b8ea70521452994a5af41..ef692a5b49d1b588e75440bcb5652b6e7cca6dad 100644 (file)
@@ -1502,10 +1502,7 @@ static int ap_proxy_strcmp_ematch(const char *str, const char *expected)
     apr_size_t x, y;
 
     for (x = 0, y = 0; expected[y]; ++y, ++x) {
-        int backref = (expected[y] == '$' && apr_isdigit(expected[y + 1]));
-        if (!str[x] && !backref)
-            return -1;
-        if (backref) {
+        if (expected[y] == '$' && apr_isdigit(expected[y + 1])) {
             do {
                 y += 2;
             } while (expected[y] == '$' && apr_isdigit(expected[y + 1]));
@@ -1518,10 +1515,12 @@ static int ap_proxy_strcmp_ematch(const char *str, const char *expected)
             }
             return -1;
         }
-        else if (expected[y] == '\\') {
+        else if (!str[x]) {
+            return -1;
+        }
+        else if (expected[y] == '\\' && !expected[++y]) {
             /* NUL is an invalid char! */
-            if (!expected[++y])
-                return -2;
+            return -2;
         }
         if (str[x] != expected[y])
             return 1;
index d302764e341325d4f583cec1da6f5cbcf85a06ef..5ec8f8e6e0edebc13bb3bff3e00fa1666d39fd4f 100644 (file)
@@ -190,8 +190,6 @@ AP_DECLARE(int) ap_strcmp_match(const char *str, const char *expected)
     int x, y;
 
     for (x = 0, y = 0; expected[y]; ++y, ++x) {
-        if ((!str[x]) && (expected[y] != '*'))
-            return -1;
         if (expected[y] == '*') {
             while (expected[++y] == '*');
             if (!expected[y])
@@ -203,6 +201,8 @@ AP_DECLARE(int) ap_strcmp_match(const char *str, const char *expected)
             }
             return -1;
         }
+        else if (!str[x])
+            return -1;
         else if ((expected[y] != '?') && (str[x] != expected[y]))
             return 1;
     }