summaryrefslogtreecommitdiffstats
path: root/Modules/_json.c
diff options
context:
space:
mode:
Diffstat (limited to 'Modules/_json.c')
-rw-r--r--Modules/_json.c14
1 files changed, 14 insertions, 0 deletions
diff --git a/Modules/_json.c b/Modules/_json.c
index 0b1bfe3..24b292c 100644
--- a/Modules/_json.c
+++ b/Modules/_json.c
@@ -662,6 +662,7 @@ _parse_object_unicode(PyScannerObject *s, PyObject *memo, PyObject *pystr, Py_ss
PyObject *key = NULL;
int has_pairs_hook = (s->object_pairs_hook != Py_None);
Py_ssize_t next_idx;
+ Py_ssize_t comma_idx;
str = PyUnicode_DATA(pystr);
kind = PyUnicode_KIND(pystr);
@@ -741,10 +742,16 @@ _parse_object_unicode(PyScannerObject *s, PyObject *memo, PyObject *pystr, Py_ss
raise_errmsg("Expecting ',' delimiter", pystr, idx);
goto bail;
}
+ comma_idx = idx;
idx++;
/* skip whitespace after , delimiter */
while (idx <= end_idx && IS_WHITESPACE(PyUnicode_READ(kind, str, idx))) idx++;
+
+ if (idx <= end_idx && PyUnicode_READ(kind, str, idx) == '}') {
+ raise_errmsg("Illegal trailing comma before end of object", pystr, comma_idx);
+ goto bail;
+ }
}
}
@@ -785,6 +792,7 @@ _parse_array_unicode(PyScannerObject *s, PyObject *memo, PyObject *pystr, Py_ssi
PyObject *val = NULL;
PyObject *rval;
Py_ssize_t next_idx;
+ Py_ssize_t comma_idx;
rval = PyList_New(0);
if (rval == NULL)
@@ -822,10 +830,16 @@ _parse_array_unicode(PyScannerObject *s, PyObject *memo, PyObject *pystr, Py_ssi
raise_errmsg("Expecting ',' delimiter", pystr, idx);
goto bail;
}
+ comma_idx = idx;
idx++;
/* skip whitespace after , */
while (idx <= end_idx && IS_WHITESPACE(PyUnicode_READ(kind, str, idx))) idx++;
+
+ if (idx <= end_idx && PyUnicode_READ(kind, str, idx) == ']') {
+ raise_errmsg("Illegal trailing comma before end of array", pystr, comma_idx);
+ goto bail;
+ }
}
}