From a74e868857e2122d3e5c895a86a8cf930af48e0a Mon Sep 17 00:00:00 2001 From: Barry Warsaw Date: Wed, 3 Sep 2003 04:08:13 +0000 Subject: 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. Backport candidate. --- Lib/email/Message.py | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/Lib/email/Message.py b/Lib/email/Message.py index 6bba6ae..d4c10df 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() -- cgit v0.12