From 77ff7b370d3becd50046190d242316f5d2df909e Mon Sep 17 00:00:00 2001 From: Neil Schemenauer Date: Mon, 4 Apr 2016 17:46:27 +0000 Subject: [PATCH] Use 'encoding' parameter of unquote_plus(), catch errors. --- quixote/http_request.py | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/quixote/http_request.py b/quixote/http_request.py index 507a730..403bccc 100644 --- a/quixote/http_request.py +++ b/quixote/http_request.py @@ -98,10 +98,15 @@ def parse_query(qs, charset): value = '' else: name, value = chunk.split('=', 1) - name = urllib.parse.unquote_plus(name) - value = urllib.parse.unquote_plus(value) - name = _decode_string(name, charset) - value = _decode_string(value, charset) + try: + name = urllib.parse.unquote_plus(name, encoding=charset, + errors='strict') + value = urllib.parse.unquote_plus(value, encoding=charset, + errors='strict') + except LookupError: + raise RequestError('unknown charset %r' % charset) + except UnicodeDecodeError: + raise RequestError('invalid %r encoded string' % charset) _add_field_value(fields, name, value) return fields