diff options
| author | Sergey Schetinin <sergey@maluke.com> | 2011-02-21 10:21:53 +0200 |
|---|---|---|
| committer | Sergey Schetinin <sergey@maluke.com> | 2011-02-21 10:21:53 +0200 |
| commit | fe9d695a0f3d6234d09a7a43aaed62a0c8f743d2 (patch) | |
| tree | f73962c086ff77d67d7ac61a8e7f81153bff4841 /webob | |
| parent | aa8341d632c95e4b6076f85da89c57b95111cd30 (diff) | |
| download | webob-fe9d695a0f3d6234d09a7a43aaed62a0c8f743d2.tar.gz | |
fix cgi.FieldStorage 'multipart/form-data' parsing (the field names are not unquoted). see also https://bitbucket.org/ianb/webob/issue/2
Diffstat (limited to 'webob')
| -rw-r--r-- | webob/multidict.py | 13 |
1 files changed, 10 insertions, 3 deletions
diff --git a/webob/multidict.py b/webob/multidict.py index 16f05bb..8965686 100644 --- a/webob/multidict.py +++ b/webob/multidict.py @@ -3,7 +3,7 @@ """ Gives a multi-value dictionary object (MultiDict) plus several wrappers """ -import cgi, copy, sys, warnings +import cgi, copy, sys, warnings, urllib from UserDict import DictMixin @@ -53,12 +53,19 @@ class MultiDict(DictMixin): Create a dict from a cgi.FieldStorage instance """ obj = cls() + if fs.type == 'multipart/form-data': + # cgi.FieldStorage parser for this ctype + # does not unquote the field names + fix_name = urllib.unquote + else: + fix_name = lambda n: n # fs.list can be None when there's nothing to parse for field in fs.list or (): + name = fix_name(field.name) if field.filename: - obj.add(field.name, field) + obj.add(name, field) else: - obj.add(field.name, field.value) + obj.add(name, field.value) return obj def __getitem__(self, key): |
