diff options
Diffstat (limited to 'Lib')
| -rw-r--r-- | Lib/json/decoder.py | 8 | ||||
| -rw-r--r-- | Lib/json/tests/test_scanstring.py | 7 |
2 files changed, 13 insertions, 2 deletions
diff --git a/Lib/json/decoder.py b/Lib/json/decoder.py index f0bc245645..4e88ba6cc9 100644 --- a/Lib/json/decoder.py +++ b/Lib/json/decoder.py @@ -18,11 +18,15 @@ NaN, PosInf, NegInf = float('nan'), float('inf'), float('-inf') def linecol(doc, pos): - lineno = doc.count('\n', 0, pos) + 1 + if isinstance(doc, bytes): + newline = b'\n' + else: + newline = '\n' + lineno = doc.count(newline, 0, pos) + 1 if lineno == 1: colno = pos else: - colno = pos - doc.rindex('\n', 0, pos) + colno = pos - doc.rindex(newline, 0, pos) return lineno, colno diff --git a/Lib/json/tests/test_scanstring.py b/Lib/json/tests/test_scanstring.py index cd205a4986..025d15da25 100644 --- a/Lib/json/tests/test_scanstring.py +++ b/Lib/json/tests/test_scanstring.py @@ -2,6 +2,7 @@ import sys import decimal from unittest import TestCase +import json import json.decoder class TestScanString(TestCase): @@ -101,3 +102,9 @@ class TestScanString(TestCase): self.assertEquals( scanstring('["Bad value", truth]', 2, None, True), ('Bad value', 12)) + + def test_issue3623(self): + self.assertRaises(ValueError, json.decoder.scanstring, b"xxx", 1, + "xxx") + self.assertRaises(UnicodeDecodeError, + json.encoder.encode_basestring_ascii, b"xx\xff") |
