Ticket #2934 defect closed fixed
t.web's Request.prePathURL does not rebuild the URL correctly
|Reported by:||emgee||Owned by:|
(diff, github, buildbot, log)
Quick summary is that the way Request unquotes and quotes the bits of the URL is not symmetrical. This shows up when a path segment contains a '/' for example.
Request.postpath is a list of decoded, i.e. real, path segments:
self.postpath = map(unquote, string.split(self.path[1:], '/'))
Items in Request.prepath are moved to Request.prepath as child resource are located, making prepath also a list of decoded path segments.
However, Request._prePathURL does not re-quote the individual prepath items. Instead it seems to rely on urllib.quote working (which it doesn't) for the whole URL string.
A fix can probably be taken from Nevow's flattener code. It uses the following to encode each path segment, query parameter name, query parameter value and fragment: