From 7687b3de7a31178f96cbf7d18cff3ece47c05b46 Mon Sep 17 00:00:00 2001 From: Mark Bishop Date: Fri, 30 Oct 2020 16:48:27 -0400 Subject: [PATCH] Fix dealing with None types --- python/objToJSON.c | 12 +++++++----- tests/test_ujson.py | 5 +++++ 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/python/objToJSON.c b/python/objToJSON.c index 5d964857..7b11d57f 100644 --- a/python/objToJSON.c +++ b/python/objToJSON.c @@ -258,7 +258,9 @@ static int Dict_iterNext(JSOBJ obj, JSONTypeContext *tc) { if (UNLIKELY(GET_TC(tc)->itemName == Py_None)) { - GET_TC(tc)->itemName = PyUnicode_FromString("null"); + itemNameTmp = PyUnicode_FromString("null"); + GET_TC(tc)->itemName = PyUnicode_AsUTF8String(itemNameTmp); + Py_DECREF(Py_None); return 1; } @@ -537,17 +539,17 @@ static void Object_beginTypeContext (JSOBJ _obj, JSONTypeContext *tc, JSONObject return; } else - if (PyFloat_Check(obj) || object_is_decimal_type(obj)) + if (obj == Py_None) { PRINTMARK(); - pc->PyTypeToJSON = PyFloatToDOUBLE; tc->type = JT_DOUBLE; + tc->type = JT_NULL; return; } else - if (obj == Py_None) + if (PyFloat_Check(obj) || object_is_decimal_type(obj)) { PRINTMARK(); - tc->type = JT_NULL; + pc->PyTypeToJSON = PyFloatToDOUBLE; tc->type = JT_DOUBLE; return; } diff --git a/tests/test_ujson.py b/tests/test_ujson.py index 56b4848d..b11e5d21 100644 --- a/tests/test_ujson.py +++ b/tests/test_ujson.py @@ -806,6 +806,11 @@ def test_reject_bytes_false(): assert ujson.dumps(data, reject_bytes=False) == '{"a":"b"}' +def test_encode_none_key(): + data = {None: None} + assert ujson.dumps(data) == '{"null":null}' + + """ def test_decode_numeric_int_frc_overflow(): input = "X.Y"