From: Barry Warsaw Date: Wed, 3 Sep 2003 04:21:29 +0000 (+0000) Subject: A fix for parsing parameters when there are semicolons inside the X-Git-Tag: v2.3.1~95 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=b1919b7ff58222820986fac2bcccbc6fc67ab9ba;p=thirdparty%2FPython%2Fcpython.git A fix for parsing parameters when there are semicolons inside the 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. --- diff --git a/Lib/email/Message.py b/Lib/email/Message.py index 6bba6aeb9811..d4c10dff0cb7 100644 --- a/Lib/email/Message.py +++ b/Lib/email/Message.py @@ -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()