Get escaping issues working in all versions.

This commit is contained in:
Dave Halter
2017-08-02 10:39:02 +02:00
parent 3ccbf4326c
commit d6b6354e17
2 changed files with 14 additions and 2 deletions

View File

@@ -541,9 +541,16 @@ class ErrorFinder(Normalizer):
is_bytes = True
if 'u' in string_prefix:
is_bytes = False
func = codecs.escape_decode if is_bytes else codecs.unicode_escape_decode
payload = leaf._get_payload()
if is_bytes:
payload = payload.encode('utf-8')
func = codecs.escape_decode
else:
func = codecs.unicode_escape_decode
try:
func(leaf._get_payload())
func(payload)
except UnicodeDecodeError as e:
self._add_syntax_error('(unicode error) ' + str(e), leaf)
except ValueError as e:

View File

@@ -306,6 +306,11 @@ def _get_actual_exception(code):
except (SyntaxError, IndentationError) as e:
wanted = e.__class__.__name__ + ': ' + e.msg
line_nr = e.lineno
except ValueError as e:
# The ValueError comes from byte literals in Python 2 like '\x'
# that are oddly enough not SyntaxErrors.
wanted = 'SyntaxError: (value error) ' + str(e)
line_nr = None
else:
assert False, "The piece of code should raise an exception."