From be0c07f218e59c14db599f416df2bc1956be0774 Mon Sep 17 00:00:00 2001 From: Nils Philippsen Date: Wed, 19 Aug 2015 16:23:10 +0200 Subject: Python 3: Don't mangle strangely encoded input In Python 3, cgi.FieldStorage needs to know about encodings like shiftjis in order to decode it properly (in Python 2 it's simply not decoded at all). Fixes tests.test_wsgiwrappers.test_wsgirequest_charset --- paste/request.py | 11 +++++++++-- paste/wsgiwrappers.py | 3 ++- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/paste/request.py b/paste/request.py index f0d91c1..8d5e5c3 100644 --- a/paste/request.py +++ b/paste/request.py @@ -140,7 +140,7 @@ def parse_dict_querystring(environ): environ['paste.parsed_dict_querystring'] = (multi, source) return multi -def parse_formvars(environ, include_get_vars=True): +def parse_formvars(environ, include_get_vars=True, encoding=None, errors=None): """Parses the request, returning a MultiDict of form variables. If ``include_get_vars`` is true then GET (query string) variables @@ -182,9 +182,16 @@ def parse_formvars(environ, include_get_vars=True): environ['CONTENT_TYPE'] = '' else: input = environ['wsgi.input'] + kwparms = {} + if six.PY3: + if encoding: + kwparms['encoding'] = encoding + if errors: + kwparms['errors'] = errors fs = cgi.FieldStorage(fp=input, environ=environ, - keep_blank_values=1) + keep_blank_values=1, + **kwparms) environ['QUERY_STRING'] = old_query_string if fake_out_cgi: environ['CONTENT_TYPE'] = old_content_type diff --git a/paste/wsgiwrappers.py b/paste/wsgiwrappers.py index 7b8f6de..674054f 100644 --- a/paste/wsgiwrappers.py +++ b/paste/wsgiwrappers.py @@ -199,7 +199,8 @@ class WSGIRequest(object): GET = property(GET, doc=GET.__doc__) def _POST(self): - return parse_formvars(self.environ, include_get_vars=False) + return parse_formvars(self.environ, include_get_vars=False, + encoding=self.charset, errors=self.errors) def POST(self): """Dictionary-like object representing the POST body. -- cgit v1.2.1