From 1fa631f71c97d8d4fca9e4482f09121d5e436720 Mon Sep 17 00:00:00 2001 From: Bob Ippolito Date: Sat, 3 Sep 2011 18:35:44 -0700 Subject: test case for https://github.com/simplejson/simplejson/issues/15 --- simplejson/tests/test_errors.py | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/simplejson/tests/test_errors.py b/simplejson/tests/test_errors.py index c8b836a..e0b958c 100644 --- a/simplejson/tests/test_errors.py +++ b/simplejson/tests/test_errors.py @@ -19,3 +19,15 @@ class TestErrors(TestCase): self.assertEquals(err.colno, 1) self.assertEquals(err.endlineno, 3) self.assertEquals(err.endcolno, 2) + + def test_scan_error(self): + err = None + try: + json.loads('{"asdf": "') + except json.JSONDecodeError, e: + err = e + else: + self.fail('Expected JSONDecodeError') + self.assertEquals(err.lineno, 1) + self.assertEquals(err.colno, 9) + \ No newline at end of file -- cgit v1.2.1 From 2d765188301e68e47f20e90b81de1476213209f4 Mon Sep 17 00:00:00 2001 From: Bob Ippolito Date: Sat, 3 Sep 2011 18:46:03 -0700 Subject: ignore coverage files --- .gitignore | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.gitignore b/.gitignore index bf76e93..f2b563c 100644 --- a/.gitignore +++ b/.gitignore @@ -2,6 +2,8 @@ *.egg *.pyc *.so +/.coverage +/coverage.xml /build /dist /docs -- cgit v1.2.1 From fb1a518e536e6bce349cd776a90a03895fa7f61b Mon Sep 17 00:00:00 2001 From: Bob Ippolito Date: Sat, 3 Sep 2011 18:46:26 -0700 Subject: also test unicode and fix the JSONDecodeError issue --- CHANGES.txt | 3 +++ simplejson/_speedups.c | 10 ++++++++-- simplejson/tests/test_errors.py | 17 +++++++++-------- 3 files changed, 20 insertions(+), 10 deletions(-) diff --git a/CHANGES.txt b/CHANGES.txt index cf8510d..4861628 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,5 +1,8 @@ Version 2.1.7 released 2011-XX-XX +* JSONDecodeError is now raised instead of ValueError when a document + ends with an opening quote and the C speedups are in use. + https://github.com/simplejson/simplejson/issues/15 * Updated documentation with information about JSONDecodeError * Force unicode linebreak characters to be escaped (U+2028 and U+2029) http://timelessrepo.com/json-isnt-a-javascript-subset diff --git a/simplejson/_speedups.c b/simplejson/_speedups.c index 8b34747..97821de 100644 --- a/simplejson/_speedups.c +++ b/simplejson/_speedups.c @@ -483,7 +483,10 @@ scanstring_str(PyObject *pystr, Py_ssize_t end, char *encoding, int strict, Py_s PyObject *chunks = NULL; PyObject *chunk = NULL; - if (end < 0 || len <= end) { + if (len == end) { + raise_errmsg("Unterminated string starting at", pystr, begin); + } + else if (end < 0 || len < end) { PyErr_SetString(PyExc_ValueError, "end is out of bounds"); goto bail; } @@ -689,7 +692,10 @@ scanstring_unicode(PyObject *pystr, Py_ssize_t end, int strict, Py_ssize_t *next PyObject *chunks = NULL; PyObject *chunk = NULL; - if (end < 0 || len <= end) { + if (len == end) { + raise_errmsg("Unterminated string starting at", pystr, begin); + } + else if (end < 0 || len < end) { PyErr_SetString(PyExc_ValueError, "end is out of bounds"); goto bail; } diff --git a/simplejson/tests/test_errors.py b/simplejson/tests/test_errors.py index e0b958c..620ccf3 100644 --- a/simplejson/tests/test_errors.py +++ b/simplejson/tests/test_errors.py @@ -22,12 +22,13 @@ class TestErrors(TestCase): def test_scan_error(self): err = None - try: - json.loads('{"asdf": "') - except json.JSONDecodeError, e: - err = e - else: - self.fail('Expected JSONDecodeError') - self.assertEquals(err.lineno, 1) - self.assertEquals(err.colno, 9) + for t in (str, unicode): + try: + json.loads(t('{"asdf": "')) + except json.JSONDecodeError, e: + err = e + else: + self.fail('Expected JSONDecodeError') + self.assertEquals(err.lineno, 1) + self.assertEquals(err.colno, 9) \ No newline at end of file -- cgit v1.2.1