diff options
author | ianb <devnull@localhost> | 2006-07-20 00:07:57 +0000 |
---|---|---|
committer | ianb <devnull@localhost> | 2006-07-20 00:07:57 +0000 |
commit | bdfabe5e64f3ee1c11a2f8eb8f16190bc98436aa (patch) | |
tree | 3c417a612b5ca1fc54c57b8613ebd9604e1e017f /paste/request.py | |
parent | db280487d5203e6dc3a02985b8d02bb5b0ec30ff (diff) | |
download | paste-bdfabe5e64f3ee1c11a2f8eb8f16190bc98436aa.tar.gz |
Keep wsgi.input from being eaten when the cgi module is looking for POST variables
Diffstat (limited to 'paste/request.py')
-rw-r--r-- | paste/request.py | 16 |
1 files changed, 15 insertions, 1 deletions
diff --git a/paste/request.py b/paste/request.py index 52431a2..25a2972 100644 --- a/paste/request.py +++ b/paste/request.py @@ -148,9 +148,23 @@ def parse_formvars(environ, all_as_list=False, include_get_vars=True): parsed, check_source = environ['paste.parsed_formvars'] if check_source == source: return parsed - fs = cgi.FieldStorage(fp=environ['wsgi.input'], + type = environ.get('CONTENT_TYPE', '').lower() + fake_out_cgi = type not in ('', 'multipart/form-data', + 'application/x-www-form-urlencoded') + if fake_out_cgi: + input = StringIO('') + old_content_type = environ.get('CONTENT_TYPE') + old_content_length = environ.get('CONTENT_LENGTH') + environ['CONTENT_LENGTH'] = '0' + environ['CONTENT_TYPE'] = '' + else: + input = environ['wsgi.input'] + fs = cgi.FieldStorage(fp=input, environ=environ, keep_blank_values=1) + if fake_out_cgi: + environ['CONTENT_TYPE'] = old_content_type + environ['CONTENT_LENGTH'] = old_content_length formvars = {} if not isinstance(fs.value, list): # Non-HTML form submission, so we just |