]> granicus.if.org Git - apache/commitdiff
mod_rewrite: Handle per-location rules when r->filename is unset.
authorJeff Trawick <trawick@apache.org>
Sat, 18 Sep 2004 16:18:26 +0000 (16:18 +0000)
committerJeff Trawick <trawick@apache.org>
Sat, 18 Sep 2004 16:18:26 +0000 (16:18 +0000)
Previously this would segfault or simply not match as expected,
depending on the platform.

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

CHANGES
modules/mappers/mod_rewrite.c

diff --git a/CHANGES b/CHANGES
index bf7f22e3db74dda1ecd74293b2a3ba5d3df18f92..301fa57ec80bc70bd99e74ed8c65ebd6435c1e63 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -2,6 +2,10 @@ Changes with Apache 2.1.0-dev
 
   [Remove entries to the current 2.0 section below, when backported]
 
+  *) mod_rewrite: Handle per-location rules when r->filename is unset.
+     Previously this would segfault or simply not match as expected,
+     depending on the platform.  [Jeff Trawick]
+
   *) Unix MPMs: Shut down the server more quickly when child processes are
      slow to exit.  [Joe Orton, Jeff Trawick]
 
index 58f9a78e494322f8f983ebee7b7a39ec45019d2e..066b0521a6d6fcb3333067c4c883334a26ed28ee 100644 (file)
@@ -4479,9 +4479,17 @@ static int hook_fixup(request_rec *r)
      *  remember the current filename before rewriting for later check
      *  to prevent deadlooping because of internal redirects
      *  on final URL/filename which can be equal to the inital one.
+     *  also, we'll restore original r->filename if we decline this
+     *  request
      */
     ofilename = r->filename;
 
+    if (r->filename == NULL) {
+        r->filename = apr_pstrdup(r->pool, r->uri);
+        rewritelog((r, 2, "init rewrite engine with requested uri %s",
+                    r->filename));
+    }
+
     /*
      *  now apply the rules ...
      */
@@ -4627,7 +4635,7 @@ static int hook_fixup(request_rec *r)
              * use the following internal redirection stuff because
              * this would lead to a deadloop.
              */
-            if (strcmp(r->filename, ofilename) == 0) {
+            if (ofilename != NULL && strcmp(r->filename, ofilename) == 0) {
                 rewritelog((r, 1, dconf->directory, "initial URL equal rewritten"
                             " URL: %s [IGNORING REWRITE]", r->filename));
                 return OK;
@@ -4680,6 +4688,7 @@ static int hook_fixup(request_rec *r)
     }
     else {
         rewritelog((r, 1, dconf->directory, "pass through %s", r->filename));
+        r->filename = ofilename;
         return DECLINED;
     }
 }