Issue 10038. Restore the Python 2.6 behavior that json.loads() always returns
unicode. Patch by Patch by Walter Dörwald.
This commit is contained in:
parent
921387ba0e
commit
fa6582752a
|
@ -78,3 +78,5 @@ class TestUnicode(TestCase):
|
|||
self.assertEquals(type(json.loads(u'""')), unicode)
|
||||
self.assertEquals(type(json.loads(u'"a"')), unicode)
|
||||
self.assertEquals(type(json.loads(u'["a"]')[0]), unicode)
|
||||
# Issue 10038.
|
||||
self.assertEquals(type(json.loads('"foo"')), unicode)
|
||||
|
|
18
Misc/NEWS
18
Misc/NEWS
|
@ -13,11 +13,11 @@ Core and Builtins
|
|||
- Issue #10221: dict.pop(k) now has a key error message that includes the
|
||||
missing key (same message d[k] returns for missing keys).
|
||||
|
||||
- Issue #10125: Don't segfault when the iterator passed to ``file.writelines()``
|
||||
closes the file.
|
||||
- Issue #10125: Don't segfault when the iterator passed to
|
||||
``file.writelines()`` closes the file.
|
||||
|
||||
- Issue #10186: Fix the SyntaxError caret when the offset is equal to the length
|
||||
of the offending line.
|
||||
- Issue #10186: Fix the SyntaxError caret when the offset is equal to the
|
||||
length of the offending line.
|
||||
|
||||
- Issue #9997: Don't let the name "top" have special significance in scope
|
||||
resolution.
|
||||
|
@ -66,10 +66,14 @@ Core and Builtins
|
|||
Library
|
||||
-------
|
||||
|
||||
- Issue 120176: Wrapped TestSuite subclass does not get __call__ executed
|
||||
- Issue #10038: json.loads() on str should always return unicode (regression
|
||||
from Python 2.6). Patch by Walter Dörwald.
|
||||
|
||||
- Issue 6706: asyncore accept() method no longer raises EWOULDBLOCK/ECONNABORTED
|
||||
on incomplete connection attempt but returns None instead.
|
||||
- Issue #120176: Wrapped TestSuite subclass does not get __call__ executed.
|
||||
|
||||
- Issue #6706: asyncore accept() method no longer raises
|
||||
EWOULDBLOCK/ECONNABORTED on incomplete connection attempt but returns None
|
||||
instead.
|
||||
|
||||
- Issue #10266: uu.decode didn't close in_file explicitly when it was given
|
||||
as a filename. Patch by Brian Brazil.
|
||||
|
|
|
@ -440,7 +440,6 @@ scanstring_str(PyObject *pystr, Py_ssize_t end, char *encoding, int strict, Py_s
|
|||
Py_ssize_t len = PyString_GET_SIZE(pystr);
|
||||
Py_ssize_t begin = end - 1;
|
||||
Py_ssize_t next;
|
||||
int has_unicode = 0;
|
||||
char *buf = PyString_AS_STRING(pystr);
|
||||
PyObject *chunks = PyList_New(0);
|
||||
if (chunks == NULL) {
|
||||
|
@ -463,9 +462,6 @@ scanstring_str(PyObject *pystr, Py_ssize_t end, char *encoding, int strict, Py_s
|
|||
raise_errmsg("Invalid control character at", pystr, next);
|
||||
goto bail;
|
||||
}
|
||||
else if (c > 0x7f) {
|
||||
has_unicode = 1;
|
||||
}
|
||||
}
|
||||
if (!(c == '"' || c == '\\')) {
|
||||
raise_errmsg("Unterminated string starting at", pystr, begin);
|
||||
|
@ -477,15 +473,10 @@ scanstring_str(PyObject *pystr, Py_ssize_t end, char *encoding, int strict, Py_s
|
|||
if (strchunk == NULL) {
|
||||
goto bail;
|
||||
}
|
||||
if (has_unicode) {
|
||||
chunk = PyUnicode_FromEncodedObject(strchunk, encoding, NULL);
|
||||
Py_DECREF(strchunk);
|
||||
if (chunk == NULL) {
|
||||
goto bail;
|
||||
}
|
||||
}
|
||||
else {
|
||||
chunk = strchunk;
|
||||
chunk = PyUnicode_FromEncodedObject(strchunk, encoding, NULL);
|
||||
Py_DECREF(strchunk);
|
||||
if (chunk == NULL) {
|
||||
goto bail;
|
||||
}
|
||||
if (PyList_Append(chunks, chunk)) {
|
||||
Py_DECREF(chunk);
|
||||
|
@ -593,21 +584,9 @@ scanstring_str(PyObject *pystr, Py_ssize_t end, char *encoding, int strict, Py_s
|
|||
}
|
||||
#endif
|
||||
}
|
||||
if (c > 0x7f) {
|
||||
has_unicode = 1;
|
||||
}
|
||||
if (has_unicode) {
|
||||
chunk = PyUnicode_FromUnicode(&c, 1);
|
||||
if (chunk == NULL) {
|
||||
goto bail;
|
||||
}
|
||||
}
|
||||
else {
|
||||
char c_char = Py_CHARMASK(c);
|
||||
chunk = PyString_FromStringAndSize(&c_char, 1);
|
||||
if (chunk == NULL) {
|
||||
goto bail;
|
||||
}
|
||||
chunk = PyUnicode_FromUnicode(&c, 1);
|
||||
if (chunk == NULL) {
|
||||
goto bail;
|
||||
}
|
||||
if (PyList_Append(chunks, chunk)) {
|
||||
Py_DECREF(chunk);
|
||||
|
|
Loading…
Reference in New Issue