summaryrefslogtreecommitdiff
path: root/paste/request.py
diff options
context:
space:
mode:
authorianb <devnull@localhost>2006-07-20 00:07:57 +0000
committerianb <devnull@localhost>2006-07-20 00:07:57 +0000
commitbdfabe5e64f3ee1c11a2f8eb8f16190bc98436aa (patch)
tree3c417a612b5ca1fc54c57b8613ebd9604e1e017f /paste/request.py
parentdb280487d5203e6dc3a02985b8d02bb5b0ec30ff (diff)
downloadpaste-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.py16
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