[Checkins] SVN: Zope/trunk/lib/python/ZPublisher/ Fix for #2288: do not quote + and @ characters when forming BaseRequest and HTTPRequest URL variables

Martijn Pieters mj at zopatista.com
Sun Mar 4 11:25:32 EST 2007


Log message for revision 72971:
  Fix for #2288: do not quote + and @ characters when forming BaseRequest and HTTPRequest URL variables

Changed:
  U   Zope/trunk/lib/python/ZPublisher/BaseRequest.py
  U   Zope/trunk/lib/python/ZPublisher/HTTPRequest.py
  U   Zope/trunk/lib/python/ZPublisher/tests/testBaseRequest.py

-=-
Modified: Zope/trunk/lib/python/ZPublisher/BaseRequest.py
===================================================================
--- Zope/trunk/lib/python/ZPublisher/BaseRequest.py	2007-03-04 16:15:18 UTC (rev 72970)
+++ Zope/trunk/lib/python/ZPublisher/BaseRequest.py	2007-03-04 16:25:31 UTC (rev 72971)
@@ -14,7 +14,7 @@
 
 $Id$
 """
-from urllib import quote
+from urllib import quote as urllib_quote
 import xmlrpc
 from zExceptions import Forbidden, Unauthorized, NotFound
 from Acquisition import aq_base
@@ -35,6 +35,10 @@
 
 UNSPECIFIED_ROLES=''
 
+def quote(text):
+    # quote url path segments, but leave + and @ intact
+    return urllib_quote(text, '/+@')
+
 try:
     from ExtensionClass import Base
     class RequestContainer(Base):

Modified: Zope/trunk/lib/python/ZPublisher/HTTPRequest.py
===================================================================
--- Zope/trunk/lib/python/ZPublisher/HTTPRequest.py	2007-03-04 16:15:18 UTC (rev 72970)
+++ Zope/trunk/lib/python/ZPublisher/HTTPRequest.py	2007-03-04 16:25:31 UTC (rev 72971)
@@ -15,10 +15,10 @@
 
 import re, sys, os, time, random, codecs, inspect
 from types import StringType, UnicodeType
-from BaseRequest import BaseRequest
+from BaseRequest import BaseRequest, quote
 from HTTPResponse import HTTPResponse
 from cgi import FieldStorage, escape
-from urllib import quote, unquote, splittype, splitport
+from urllib import unquote, splittype, splitport
 from copy import deepcopy
 from Converters import get_converter
 from TaintedString import TaintedString

Modified: Zope/trunk/lib/python/ZPublisher/tests/testBaseRequest.py
===================================================================
--- Zope/trunk/lib/python/ZPublisher/tests/testBaseRequest.py	2007-03-04 16:15:18 UTC (rev 72970)
+++ Zope/trunk/lib/python/ZPublisher/tests/testBaseRequest.py	2007-03-04 16:25:31 UTC (rev 72971)
@@ -385,7 +385,17 @@
         # using default view
         self.setDefaultViewName('methonly')
         self.assertRaises(NotFound, r.traverse, 'folder2/obj2')
+        
+    def test_quoting(self):
+        """View markers should not be quoted"""
+        r = self.makeBaseRequest()
+        r.traverse('folder/obj/@@meth')
+        self.assertEqual(r['URL'], '/folder/obj/@@meth')
 
+        r = self.makeBaseRequest()
+        r.traverse('folder/obj/++view++meth')
+        self.assertEqual(r['URL'], '/folder/obj/++view++meth')
+
 def test_suite():
     return TestSuite( ( makeSuite(TestBaseRequest),
                         makeSuite(TestBaseRequestZope3Views),



More information about the Checkins mailing list