diff --git a/Modules/_json.c b/Modules/_json.c index 6cc31c6e371224..4887210bdb45e0 100644 --- a/Modules/_json.c +++ b/Modules/_json.c @@ -1503,6 +1503,14 @@ encoder_listencode_obj(PyEncoderObject *s, _PyAccu *acc, } } newobj = PyObject_CallFunctionObjArgs(s->defaultfn, obj, NULL); + if (newobj != NULL && Py_TYPE(newobj) == Py_TYPE(obj)) { + PyErr_SetString(PyExc_TypeError, "Default serialization function " + "returning same type"); + Py_DECREF(newobj); + Py_XDECREF(ident); + return -1; + } + if (newobj == NULL) { Py_XDECREF(ident); return -1;