Opened 7 years ago

Closed 7 years ago

#2934 defect closed fixed (fixed)

t.web's Request.prePathURL does not rebuild the URL correctly

Reported by: emgee Owned by:
Priority: highest Milestone:
Component: web Keywords:
Cc: matt@… Branch: branches/prepath-quoting-2934
(diff, github, buildbot, log)
Author: exarkun Launchpad Bug:

Description

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:

urllib.quote(original, safe="-_.!*'()")

Change History (6)

comment:1 Changed 7 years ago by exarkun

  • Owner changed from jknight to exarkun
  • Status changed from new to assigned

comment:2 Changed 7 years ago by exarkun

  • author set to exarkun
  • Branch set to branches/prepath-quoting-2934

(In [22049]) Branching to 'prepath-quoting-2934'

comment:3 Changed 7 years ago by exarkun

  • Keywords review added
  • Owner exarkun deleted
  • Status changed from assigned to new

I fixed this by quoting each segment with safe= instead of quoting the whole URL.

This is different from what it used to do in that the hostname no longer goes through the quoting step. I don't know if this is right or not.

Ready for review.

comment:4 Changed 7 years ago by therve

  • Keywords review removed
  • Owner set to exarkun
  • Priority changed from normal to highest

I don't think that quoting hostname is a problem. It should not contain characters that needs quoting anyway.

Please merge.

comment:5 Changed 7 years ago by exarkun

  • Resolution set to fixed
  • Status changed from new to closed

(In [22056]) Merge prepath-quoting-2934

Author: exarkun
Reviewer: therve
Fixes #2934

Correctly re-quote URL path segments when generating an URL string to
return from Request.prePathURL.

comment:6 Changed 3 years ago by <automation>

  • Owner exarkun deleted
Note: See TracTickets for help on using tickets.