73 lines
2.3 KiB
Diff
73 lines
2.3 KiB
Diff
commit 870ee48fe109c289033cd0b7543b6f5ea4e6f128
|
|
Author: Joakim Hamren <joakim.hamren@gmail.com>
|
|
Date: Sat Feb 4 01:07:52 2017 +0100
|
|
|
|
Fixes for sort_keys bug and a typo.
|
|
|
|
- Fixed segfault when using sort_keys=True on dict with unorderable keys (GH247)
|
|
|
|
- Fixed refcount becoming negative when using sort_keys=True (GH243)
|
|
|
|
- Fixed compile error when defining JSON_NO_EXTRA_WHITESPACE
|
|
caused by a wrongly named variable. (GH245)
|
|
|
|
diff --git a/lib/ultrajsonenc.c b/lib/ultrajsonenc.c
|
|
index cb10024..1bfa8f4 100644
|
|
--- a/lib/ultrajsonenc.c
|
|
+++ b/lib/ultrajsonenc.c
|
|
@@ -717,7 +717,7 @@ static void encode(JSOBJ obj, JSONObjectEncoder *enc, const char *name, size_t c
|
|
{
|
|
const char *value;
|
|
char *objName;
|
|
- int count;
|
|
+ int count, res;
|
|
JSOBJ iterObj;
|
|
size_t szlen;
|
|
JSONTypeContext tc;
|
|
@@ -796,7 +796,7 @@ static void encode(JSOBJ obj, JSONObjectEncoder *enc, const char *name, size_t c
|
|
{
|
|
Buffer_AppendCharUnchecked (enc, ',');
|
|
#ifndef JSON_NO_EXTRA_WHITESPACE
|
|
- Buffer_AppendCharUnchecked (buffer, ' ');
|
|
+ Buffer_AppendCharUnchecked (enc, ' ');
|
|
#endif
|
|
Buffer_AppendIndentNewlineUnchecked (enc);
|
|
}
|
|
@@ -823,8 +823,16 @@ static void encode(JSOBJ obj, JSONObjectEncoder *enc, const char *name, size_t c
|
|
Buffer_AppendCharUnchecked (enc, '{');
|
|
Buffer_AppendIndentNewlineUnchecked (enc);
|
|
|
|
- while (enc->iterNext(obj, &tc))
|
|
+ while ((res = enc->iterNext(obj, &tc)))
|
|
{
|
|
+ if(res < 0)
|
|
+ {
|
|
+ enc->iterEnd(obj, &tc);
|
|
+ enc->endTypeContext(obj, &tc);
|
|
+ enc->level--;
|
|
+ return;
|
|
+ }
|
|
+
|
|
if (count > 0)
|
|
{
|
|
Buffer_AppendCharUnchecked (enc, ',');
|
|
diff --git a/python/objToJSON.c b/python/objToJSON.c
|
|
index 1960d40..8133fb5 100644
|
|
--- a/python/objToJSON.c
|
|
+++ b/python/objToJSON.c
|
|
@@ -537,6 +537,7 @@ static int SortedDict_iterNext(JSOBJ obj, JSONTypeContext *tc)
|
|
// Sort the list.
|
|
if (PyList_Sort(items) < 0)
|
|
{
|
|
+ PyErr_SetString(PyExc_ValueError, "unorderable keys");
|
|
goto error;
|
|
}
|
|
|
|
@@ -607,7 +608,6 @@ static void SortedDict_iterEnd(JSOBJ obj, JSONTypeContext *tc)
|
|
{
|
|
GET_TC(tc)->itemName = NULL;
|
|
GET_TC(tc)->itemValue = NULL;
|
|
- Py_DECREF(GET_TC(tc)->newObj);
|
|
Py_DECREF(GET_TC(tc)->dictObj);
|
|
PRINTMARK();
|
|
}
|