[Checkins] SVN: zope.publisher/trunk/ Fix error when no charset matches form data and HTTP_ACCEPT_CHARSET contains a *.

Brian Sutherland jinty at web.de
Fri Oct 14 05:27:59 EST 2011


Log message for revision 123091:
  Fix error when no charset matches form data and HTTP_ACCEPT_CHARSET contains a *.
  

Changed:
  U   zope.publisher/trunk/CHANGES.txt
  U   zope.publisher/trunk/src/zope/publisher/browser.py
  U   zope.publisher/trunk/src/zope/publisher/tests/test_browserrequest.py

-=-
Modified: zope.publisher/trunk/CHANGES.txt
===================================================================
--- zope.publisher/trunk/CHANGES.txt	2011-10-13 17:06:30 UTC (rev 123090)
+++ zope.publisher/trunk/CHANGES.txt	2011-10-14 10:27:58 UTC (rev 123091)
@@ -4,7 +4,7 @@
 3.12.7 (unreleased)
 -------------------
 
-- Nothing changed yet.
+- Fix error when no charset matches form data and HTTP_ACCEPT_CHARSET contains a *.
 
 
 3.12.6 (2010-12-17)

Modified: zope.publisher/trunk/src/zope/publisher/browser.py
===================================================================
--- zope.publisher/trunk/src/zope/publisher/browser.py	2011-10-13 17:06:30 UTC (rev 123090)
+++ zope.publisher/trunk/src/zope/publisher/browser.py	2011-10-14 10:27:58 UTC (rev 123091)
@@ -249,6 +249,7 @@
         if self.charsets is None:
             envadapter = IUserPreferredCharsets(self)
             self.charsets = envadapter.getPreferredCharsets() or ['utf-8']
+            self.charsets = [c for c in self.charsets if c != '*']
         for charset in self.charsets:
             try:
                 text = unicode(text, charset)

Modified: zope.publisher/trunk/src/zope/publisher/tests/test_browserrequest.py
===================================================================
--- zope.publisher/trunk/src/zope/publisher/tests/test_browserrequest.py	2011-10-13 17:06:30 UTC (rev 123090)
+++ zope.publisher/trunk/src/zope/publisher/tests/test_browserrequest.py	2011-10-14 10:27:58 UTC (rev 123091)
@@ -274,6 +274,15 @@
         self.assert_(isinstance(request.form[u'street'], unicode))
         self.assertEqual(unicode(encoded, 'utf-8'), request.form['street'])
 
+    def testFormAcceptsStarButNotUTF8(self):
+        extra = {
+            'QUERY_STRING': 'a=5&b:int=6&latin_1=\xf6', # latin-1
+            'HTTP_ACCEPT_CHARSET': 'utf-8;q=0.7, *;q=0.7',
+            }
+        request = self._createRequest(extra)
+        # don't error when * is in ACCEPT_CHARSET and data is not UTF-8
+        publish(request)
+
     def testFormListTypes(self):
         extra = {'QUERY_STRING':'a:list=5&a:list=6&b=1'}
         request = self._createRequest(extra)



More information about the checkins mailing list