You are viewing a plain text version of this content. The canonical link for it is here.
Posted to apache-bugdb@apache.org by ab...@apache.org on 2001/05/06 21:35:02 UTC

Re: mod_alias/7503: PATCH: RedirectMatch is inconsistent with Redirect

[In order for any reply to be added to the PR database, you need]
[to include <ap...@Apache.Org> in the Cc line and make sure the]
[subject line starts with the report component and number, with ]
[or without any 'Re:' prefixes (such as "general/1098:" or      ]
["Re: general/1098:").  If the subject doesn't match this       ]
[pattern, your message will be misfiled and ignored.  The       ]
["apbugs" address is not added to the Cc line of messages from  ]
[the database automatically because of the potential for mail   ]
[loops.  If you do not include this Cc, your reply may be ig-   ]
[nored unless you are responding to an explicit request from a  ]
[developer.  Reply only with text; DO NOT SEND ATTACHMENTS!     ]


Synopsis: PATCH: RedirectMatch is inconsistent with Redirect

State-Changed-From-To: open-feedback
State-Changed-By: abagchi
State-Changed-When: Sun May  6 12:35:01 PDT 2001
State-Changed-Why:
We can't just remove the escaping, because it is possible
to redirect to a file with a space in it.  If we don't
escape the URI, then we will redirect to an invalid URL.
The problem is that we are escaping too much.  Currently we escape the URI and the QUERY_STRING.

I am attaching a patch that solves this problem, while maintaining the ability to redirect to a URL with spaces.  This patch is against 2.0, but it should also apply to 1.3.  Please test this and let me know if it works for you.

Index: modules/mappers/mod_alias.c
===================================================================
RCS file: /home/cvs/httpd-2.0/modules/mappers/mod_alias.c,v
retrieving revision 1.27
diff -u -d -b -w -u -r1.27 mod_alias.c
--- modules/mappers/mod_alias.c 2001/02/18 02:58:52     1.27
+++ modules/mappers/mod_alias.c 2001/05/06 19:16:26
@@ -335,7 +335,10 @@
                    found = ap_pregsub(r->pool, p->real, r->uri,
                                    p->regexp->re_nsub + 1, regm);
                    if (found && doesc) {
-                       found = ap_escape_uri(r->pool, found);
+                        uri_components uri;
+                        ap_parse_uri_components(r->pool, found, &uri);
+                       found = ap_escape_uri(r->pool, uri.path);
+                        found = apr_pstrcat(r->pool, found, "?", uri.query, NULL);
                    }
                }
                else {