From fb3336acfde3204fd01ce519ef24cc18a94dfa3f Mon Sep 17 00:00:00 2001 From: stratakis Date: Thu, 14 Mar 2019 16:22:46 +0100 Subject: [2.7] bpo-36291: Fix a possible reference leak in the json module (GH-12330) Fix a reference leak in json if parsing a floating point number fails. If PyOS_string_to_double() fails in _match_number_str(): decrement numstr ref counter. --- Misc/NEWS.d/next/Library/2019-03-14-15-54-46.bpo-36291.UalHXP.rst | 1 + Modules/_json.c | 4 +++- 2 files changed, 4 insertions(+), 1 deletion(-) create mode 100644 Misc/NEWS.d/next/Library/2019-03-14-15-54-46.bpo-36291.UalHXP.rst diff --git a/Misc/NEWS.d/next/Library/2019-03-14-15-54-46.bpo-36291.UalHXP.rst b/Misc/NEWS.d/next/Library/2019-03-14-15-54-46.bpo-36291.UalHXP.rst new file mode 100644 index 0000000..07d780c --- /dev/null +++ b/Misc/NEWS.d/next/Library/2019-03-14-15-54-46.bpo-36291.UalHXP.rst @@ -0,0 +1 @@ +Fix a possible reference leak in the json module. diff --git a/Modules/_json.c b/Modules/_json.c index 3a88882..050d37d 100644 --- a/Modules/_json.c +++ b/Modules/_json.c @@ -1375,8 +1375,10 @@ _match_number_str(PyScannerObject *s, PyObject *pystr, Py_ssize_t start, Py_ssiz else { double d = PyOS_string_to_double(PyString_AS_STRING(numstr), NULL, NULL); - if (d == -1.0 && PyErr_Occurred()) + if (d == -1.0 && PyErr_Occurred()) { + Py_DECREF(numstr); return NULL; + } rval = PyFloat_FromDouble(d); } } -- cgit v0.12