]> granicus.if.org Git - python/commitdiff
Issue #5277: Fix quote counting when parsing RFC 2231 encoded parameters.
authorR. David Murray <rdmurray@bitdance.com>
Tue, 13 Apr 2010 20:57:40 +0000 (20:57 +0000)
committerR. David Murray <rdmurray@bitdance.com>
Tue, 13 Apr 2010 20:57:40 +0000 (20:57 +0000)
Lib/email/message.py
Lib/email/test/test_email.py
Misc/ACKS
Misc/NEWS

index 6adb3f63430b6ac49e657810ad65c8af541fd13a..993a1ac0f9877bc3b86289b52f78087b39862f21 100644 (file)
@@ -62,7 +62,7 @@ def _parseparam(s):
     while s[:1] == ';':
         s = s[1:]
         end = s.find(';')
-        while end > 0 and s.count('"', 0, end) % 2:
+        while end > 0 and (s.count('"', 0, end) - s.count('\\"', 0, end)) % 2:
             end = s.find(';', end + 1)
         if end < 0:
             end = len(s)
index 36b308fd97c00c62be183ef1364845f7710a7429..22eddd594005afdc69766d77a4656283201627ec 100644 (file)
@@ -351,6 +351,14 @@ class TestMessageAPI(TestEmailBase):
         self.assertEqual(msg.get_param('name', unquote=False),
                          '"Jim&amp;&amp;Jill"')
 
+    def test_get_param_with_quotes(self):
+        msg = email.message_from_string(
+            'Content-Type: foo; bar*0="baz\\"foobar"; bar*1="\\"baz"')
+        self.assertEqual(msg.get_param('bar'), 'baz"foobar"baz')
+        msg = email.message_from_string(
+            "Content-Type: foo; bar*0=\"baz\\\"foobar\"; bar*1=\"\\\"baz\"")
+        self.assertEqual(msg.get_param('bar'), 'baz"foobar"baz')
+
     def test_has_key(self):
         msg = email.message_from_string('Header: exists')
         self.assertTrue(msg.has_key('header'))
index 2a031e7153bb96a87a612956deb9f077dcb61b07..9eeb9bb206eb472f72e4ba8ba7679c593d0bd081 100644 (file)
--- a/Misc/ACKS
+++ b/Misc/ACKS
@@ -162,6 +162,7 @@ David Cournapeau
 Steve Cousins
 Alex Coventry
 Matthew Dixon Cowles
+Ryan Coyner
 Christopher A. Craig
 Laura Creighton
 Simon Cross
@@ -667,6 +668,7 @@ George Sakkis
 Rich Salz
 Kevin Samborn
 Ilya Sandler
+Mark Sapiro
 Ty Sarna
 Ben Sayer
 Michael Scharf
index d2b907eda5e9ae9b15c85affe07649ee90b57125..3ea6fff835b45d5dc55b2785edcd280f9f2023c0 100644 (file)
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -83,6 +83,8 @@ Core and Builtins
 Library
 -------
 
+- Issue #5277: Fix quote counting when parsing RFC 2231 encoded parameters.
+
 - Issue #8321: Give access to OpenSSL version numbers from the `ssl` module,
   using the new attributes `ssl.OPENSSL_VERSION`, `ssl.OPENSSL_VERSION_INFO`
   and `ssl.OPENSSL_VERSION_NUMBER`.