]> granicus.if.org Git - python/commitdiff
A fix for parsing parameters when there are semicolons inside the
authorBarry Warsaw <barry@python.org>
Wed, 3 Sep 2003 04:08:13 +0000 (04:08 +0000)
committerBarry Warsaw <barry@python.org>
Wed, 3 Sep 2003 04:08:13 +0000 (04:08 +0000)
quotes.  Fixes SF bug #794466, with the essential patch provided by
Stuart D. Gathman.  Specifically,

_parseparam(), _get_params_preserve(): Use the parsing function that
takes quotes into account, as given (essentially) in the bug report's
test program.

Backport candidate.

Lib/email/Message.py

index 6bba6aeb9811f686ad2db2eca062f6e659bf7f05..d4c10dff0cb717cb22d8a93d9286416bdf1e74dc 100644 (file)
@@ -58,6 +58,23 @@ def _formatparam(param, value=None, quote=True):
     else:
         return param
 
+def _parseparam(s):
+    plist = []
+    while s[:1] == ';':
+        s = s[1:]
+        end = s.find(';')
+        while end > 0 and s.count('"', 0, end) % 2:
+            end = s.find(';', end + 1)
+        if end < 0:
+            end = len(s)
+        f = s[:end]
+        if '=' in f:
+            i = f.index('=')
+            f = f[:i].strip().lower() + '=' + f[i+1:].strip()
+        plist.append(f.strip())
+        s = s[end:]
+    return plist
+
 
 def _unquotevalue(value):
     if isinstance(value, TupleType):
@@ -525,7 +542,7 @@ class Message:
         if value is missing:
             return failobj
         params = []
-        for p in paramre.split(value):
+        for p in _parseparam(';' + value):
             try:
                 name, val = p.split('=', 1)
                 name = name.strip()