Kaydet (Commit) a13d4759 authored tarafından Benjamin Peterson's avatar Benjamin Peterson

merge r66932 and add a few py3k only checks

üst 60192084
...@@ -18,11 +18,15 @@ NaN, PosInf, NegInf = float('nan'), float('inf'), float('-inf') ...@@ -18,11 +18,15 @@ NaN, PosInf, NegInf = float('nan'), float('inf'), float('-inf')
def linecol(doc, pos): 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: if lineno == 1:
colno = pos colno = pos
else: else:
colno = pos - doc.rindex('\n', 0, pos) colno = pos - doc.rindex(newline, 0, pos)
return lineno, colno return lineno, colno
......
...@@ -2,6 +2,7 @@ import sys ...@@ -2,6 +2,7 @@ import sys
import decimal import decimal
from unittest import TestCase from unittest import TestCase
import json
import json.decoder import json.decoder
class TestScanString(TestCase): class TestScanString(TestCase):
...@@ -101,3 +102,9 @@ class TestScanString(TestCase): ...@@ -101,3 +102,9 @@ class TestScanString(TestCase):
self.assertEquals( self.assertEquals(
scanstring('["Bad value", truth]', 2, None, True), scanstring('["Bad value", truth]', 2, None, True),
('Bad value', 12)) ('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")
...@@ -179,11 +179,13 @@ raise_errmsg(char *msg, PyObject *s, Py_ssize_t end) ...@@ -179,11 +179,13 @@ raise_errmsg(char *msg, PyObject *s, Py_ssize_t end)
errmsg_fn = PyObject_GetAttrString(decoder, "errmsg"); errmsg_fn = PyObject_GetAttrString(decoder, "errmsg");
if (errmsg_fn == NULL) if (errmsg_fn == NULL)
return; return;
Py_XDECREF(decoder); Py_DECREF(decoder);
} }
pymsg = PyObject_CallFunction(errmsg_fn, "(zOn)", msg, s, end); pymsg = PyObject_CallFunction(errmsg_fn, "(zOn)", msg, s, end);
PyErr_SetObject(PyExc_ValueError, pymsg); if (pymsg) {
Py_DECREF(pymsg); PyErr_SetObject(PyExc_ValueError, pymsg);
Py_DECREF(pymsg);
}
/* /*
def linecol(doc, pos): def linecol(doc, pos):
...@@ -602,7 +604,7 @@ py_encode_basestring_ascii(PyObject* self, PyObject *pystr) ...@@ -602,7 +604,7 @@ py_encode_basestring_ascii(PyObject* self, PyObject *pystr)
Py_TYPE(pystr)->tp_name); Py_TYPE(pystr)->tp_name);
return NULL; return NULL;
} }
if (PyBytes_Check(rval)) { if (rval != NULL && PyBytes_Check(rval)) {
PyObject *urval = PyUnicode_DecodeASCII(PyBytes_AS_STRING(rval), PyBytes_GET_SIZE(rval), NULL); PyObject *urval = PyUnicode_DecodeASCII(PyBytes_AS_STRING(rval), PyBytes_GET_SIZE(rval), NULL);
Py_DECREF(rval); Py_DECREF(rval);
return urval; return urval;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment