components/apache24/patches/bug60577.patch
author Petr Sumbera <petr.sumbera@oracle.com>
Wed, 21 Dec 2016 07:38:10 -0800
changeset 7586 3db1c2ef2aa9
permissions -rw-r--r--
25305111 Upgrade Apache Web Server to version 2.4.25 25260686 problem in UTILITY/APACHE 25305144 problem in UTILITY/APACHE
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
7586
3db1c2ef2aa9 25305111 Upgrade Apache Web Server to version 2.4.25
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
     1
https://bz.apache.org/bugzilla/show_bug.cgi?id=60577
3db1c2ef2aa9 25305111 Upgrade Apache Web Server to version 2.4.25
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
     2
3db1c2ef2aa9 25305111 Upgrade Apache Web Server to version 2.4.25
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
     3
Index: modules/cache/cache_util.c
3db1c2ef2aa9 25305111 Upgrade Apache Web Server to version 2.4.25
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
     4
===================================================================
3db1c2ef2aa9 25305111 Upgrade Apache Web Server to version 2.4.25
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
     5
--- modules/cache/cache_util.c	(revision 1778044)
3db1c2ef2aa9 25305111 Upgrade Apache Web Server to version 2.4.25
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
     6
+++ modules/cache/cache_util.c	(working copy)
3db1c2ef2aa9 25305111 Upgrade Apache Web Server to version 2.4.25
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
     7
@@ -31,10 +31,8 @@ extern module AP_MODULE_DECLARE_DATA cache_module;
3db1c2ef2aa9 25305111 Upgrade Apache Web Server to version 2.4.25
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
     8
  * in "filter". All but the path comparisons are case-insensitive.
3db1c2ef2aa9 25305111 Upgrade Apache Web Server to version 2.4.25
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
     9
  */
3db1c2ef2aa9 25305111 Upgrade Apache Web Server to version 2.4.25
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    10
 static int uri_meets_conditions(const apr_uri_t *filter, const int pathlen,
3db1c2ef2aa9 25305111 Upgrade Apache Web Server to version 2.4.25
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    11
-                                request_rec *r)
3db1c2ef2aa9 25305111 Upgrade Apache Web Server to version 2.4.25
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    12
+                                const apr_uri_t *url)
3db1c2ef2aa9 25305111 Upgrade Apache Web Server to version 2.4.25
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    13
 {
3db1c2ef2aa9 25305111 Upgrade Apache Web Server to version 2.4.25
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    14
-    const apr_uri_t *url = &r->parsed_uri;
3db1c2ef2aa9 25305111 Upgrade Apache Web Server to version 2.4.25
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    15
-
3db1c2ef2aa9 25305111 Upgrade Apache Web Server to version 2.4.25
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    16
     /* Scheme, hostname port and local part. The filter URI and the
3db1c2ef2aa9 25305111 Upgrade Apache Web Server to version 2.4.25
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    17
      * URI we test may have the following shapes:
3db1c2ef2aa9 25305111 Upgrade Apache Web Server to version 2.4.25
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    18
      *   /<path>
3db1c2ef2aa9 25305111 Upgrade Apache Web Server to version 2.4.25
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    19
@@ -114,7 +112,7 @@ static int uri_meets_conditions(const apr_uri_t *f
3db1c2ef2aa9 25305111 Upgrade Apache Web Server to version 2.4.25
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    20
     /* For HTTP caching purposes, an empty (NULL) path is equivalent to
3db1c2ef2aa9 25305111 Upgrade Apache Web Server to version 2.4.25
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    21
      * a single "/" path. RFCs 3986/2396
3db1c2ef2aa9 25305111 Upgrade Apache Web Server to version 2.4.25
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    22
      */
3db1c2ef2aa9 25305111 Upgrade Apache Web Server to version 2.4.25
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    23
-    if (!r->uri) {
3db1c2ef2aa9 25305111 Upgrade Apache Web Server to version 2.4.25
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    24
+    if (!url->path) {
3db1c2ef2aa9 25305111 Upgrade Apache Web Server to version 2.4.25
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    25
         if (*filter->path == '/' && pathlen == 1) {
3db1c2ef2aa9 25305111 Upgrade Apache Web Server to version 2.4.25
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    26
             return 1;
3db1c2ef2aa9 25305111 Upgrade Apache Web Server to version 2.4.25
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    27
         }
3db1c2ef2aa9 25305111 Upgrade Apache Web Server to version 2.4.25
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    28
@@ -126,7 +124,7 @@ static int uri_meets_conditions(const apr_uri_t *f
3db1c2ef2aa9 25305111 Upgrade Apache Web Server to version 2.4.25
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    29
     /* Url has met all of the filter conditions so far, determine
3db1c2ef2aa9 25305111 Upgrade Apache Web Server to version 2.4.25
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    30
      * if the paths match.
3db1c2ef2aa9 25305111 Upgrade Apache Web Server to version 2.4.25
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    31
      */
3db1c2ef2aa9 25305111 Upgrade Apache Web Server to version 2.4.25
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    32
-    return !strncmp(filter->path, r->uri, pathlen);
3db1c2ef2aa9 25305111 Upgrade Apache Web Server to version 2.4.25
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    33
+    return !strncmp(filter->path, url->path, pathlen);
3db1c2ef2aa9 25305111 Upgrade Apache Web Server to version 2.4.25
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    34
 }
3db1c2ef2aa9 25305111 Upgrade Apache Web Server to version 2.4.25
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    35
 
3db1c2ef2aa9 25305111 Upgrade Apache Web Server to version 2.4.25
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    36
 static cache_provider_list *get_provider(request_rec *r, struct cache_enable *ent,
3db1c2ef2aa9 25305111 Upgrade Apache Web Server to version 2.4.25
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    37
@@ -172,6 +170,7 @@ cache_provider_list *cache_get_providers(request_r
3db1c2ef2aa9 25305111 Upgrade Apache Web Server to version 2.4.25
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    38
 {
3db1c2ef2aa9 25305111 Upgrade Apache Web Server to version 2.4.25
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    39
     cache_dir_conf *dconf = ap_get_module_config(r->per_dir_config, &cache_module);
3db1c2ef2aa9 25305111 Upgrade Apache Web Server to version 2.4.25
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    40
     cache_provider_list *providers = NULL;
3db1c2ef2aa9 25305111 Upgrade Apache Web Server to version 2.4.25
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    41
+    const apr_uri_t *url;
3db1c2ef2aa9 25305111 Upgrade Apache Web Server to version 2.4.25
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    42
     int i;
3db1c2ef2aa9 25305111 Upgrade Apache Web Server to version 2.4.25
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    43
 
3db1c2ef2aa9 25305111 Upgrade Apache Web Server to version 2.4.25
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    44
     /* per directory cache disable */
3db1c2ef2aa9 25305111 Upgrade Apache Web Server to version 2.4.25
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    45
@@ -179,11 +178,25 @@ cache_provider_list *cache_get_providers(request_r
3db1c2ef2aa9 25305111 Upgrade Apache Web Server to version 2.4.25
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    46
         return NULL;
3db1c2ef2aa9 25305111 Upgrade Apache Web Server to version 2.4.25
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    47
     }
3db1c2ef2aa9 25305111 Upgrade Apache Web Server to version 2.4.25
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    48
 
3db1c2ef2aa9 25305111 Upgrade Apache Web Server to version 2.4.25
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    49
+    url = &r->parsed_uri;
3db1c2ef2aa9 25305111 Upgrade Apache Web Server to version 2.4.25
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    50
+    if (url->path != r->uri || (r->uri && strcmp(url->path, r->uri))) {
3db1c2ef2aa9 25305111 Upgrade Apache Web Server to version 2.4.25
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    51
+        apr_uri_t *uri = apr_pcalloc(r->pool, sizeof *uri);
3db1c2ef2aa9 25305111 Upgrade Apache Web Server to version 2.4.25
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    52
+        if (r->uri && apr_uri_parse(r->pool, r->uri, uri)) {
3db1c2ef2aa9 25305111 Upgrade Apache Web Server to version 2.4.25
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    53
+            return NULL;
3db1c2ef2aa9 25305111 Upgrade Apache Web Server to version 2.4.25
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    54
+        }
3db1c2ef2aa9 25305111 Upgrade Apache Web Server to version 2.4.25
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    55
+        if (!uri->scheme) {
3db1c2ef2aa9 25305111 Upgrade Apache Web Server to version 2.4.25
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    56
+            char *path = uri->path;
3db1c2ef2aa9 25305111 Upgrade Apache Web Server to version 2.4.25
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    57
+            memcpy(uri, url, sizeof *uri);
3db1c2ef2aa9 25305111 Upgrade Apache Web Server to version 2.4.25
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    58
+            uri->path = path;
3db1c2ef2aa9 25305111 Upgrade Apache Web Server to version 2.4.25
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    59
+        }
3db1c2ef2aa9 25305111 Upgrade Apache Web Server to version 2.4.25
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    60
+        url = uri;
3db1c2ef2aa9 25305111 Upgrade Apache Web Server to version 2.4.25
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    61
+    }
3db1c2ef2aa9 25305111 Upgrade Apache Web Server to version 2.4.25
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    62
+
3db1c2ef2aa9 25305111 Upgrade Apache Web Server to version 2.4.25
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    63
     /* global cache disable */
3db1c2ef2aa9 25305111 Upgrade Apache Web Server to version 2.4.25
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    64
     for (i = 0; i < conf->cachedisable->nelts; i++) {
3db1c2ef2aa9 25305111 Upgrade Apache Web Server to version 2.4.25
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    65
         struct cache_disable *ent =
3db1c2ef2aa9 25305111 Upgrade Apache Web Server to version 2.4.25
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    66
                                (struct cache_disable *)conf->cachedisable->elts;
3db1c2ef2aa9 25305111 Upgrade Apache Web Server to version 2.4.25
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    67
-        if (uri_meets_conditions(&ent[i].url, ent[i].pathlen, r)) {
3db1c2ef2aa9 25305111 Upgrade Apache Web Server to version 2.4.25
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    68
+        if (uri_meets_conditions(&ent[i].url, ent[i].pathlen, url)) {
3db1c2ef2aa9 25305111 Upgrade Apache Web Server to version 2.4.25
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    69
             /* Stop searching now. */
3db1c2ef2aa9 25305111 Upgrade Apache Web Server to version 2.4.25
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    70
             return NULL;
3db1c2ef2aa9 25305111 Upgrade Apache Web Server to version 2.4.25
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    71
         }
3db1c2ef2aa9 25305111 Upgrade Apache Web Server to version 2.4.25
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    72
@@ -200,7 +213,7 @@ cache_provider_list *cache_get_providers(request_r
3db1c2ef2aa9 25305111 Upgrade Apache Web Server to version 2.4.25
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    73
     for (i = 0; i < conf->cacheenable->nelts; i++) {
3db1c2ef2aa9 25305111 Upgrade Apache Web Server to version 2.4.25
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    74
         struct cache_enable *ent =
3db1c2ef2aa9 25305111 Upgrade Apache Web Server to version 2.4.25
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    75
                                 (struct cache_enable *)conf->cacheenable->elts;
3db1c2ef2aa9 25305111 Upgrade Apache Web Server to version 2.4.25
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    76
-        if (uri_meets_conditions(&ent[i].url, ent[i].pathlen, r)) {
3db1c2ef2aa9 25305111 Upgrade Apache Web Server to version 2.4.25
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    77
+        if (uri_meets_conditions(&ent[i].url, ent[i].pathlen, url)) {
3db1c2ef2aa9 25305111 Upgrade Apache Web Server to version 2.4.25
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    78
             providers = get_provider(r, &ent[i], providers);
3db1c2ef2aa9 25305111 Upgrade Apache Web Server to version 2.4.25
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    79
         }
3db1c2ef2aa9 25305111 Upgrade Apache Web Server to version 2.4.25
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff changeset
    80
     }