mirror of
https://github.com/python/cpython.git
synced 2025-08-22 09:45:06 +00:00
Issue #24115: Update uses of PyObject_IsTrue(), PyObject_Not(),
PyObject_IsInstance(), PyObject_RichCompareBool() and _PyDict_Contains() to check for and handle errors correctly.
This commit is contained in:
commit
ac5569b1fa
10 changed files with 92 additions and 40 deletions
|
@ -710,6 +710,9 @@ _parse_object_unicode(PyScannerObject *s, PyObject *pystr, Py_ssize_t idx, Py_ss
|
|||
int has_pairs_hook = (s->object_pairs_hook != Py_None);
|
||||
Py_ssize_t next_idx;
|
||||
|
||||
if (strict < 0)
|
||||
return NULL;
|
||||
|
||||
if (PyUnicode_READY(pystr) == -1)
|
||||
return NULL;
|
||||
|
||||
|
@ -1055,6 +1058,7 @@ scan_once_unicode(PyScannerObject *s, PyObject *pystr, Py_ssize_t idx, Py_ssize_
|
|||
void *str;
|
||||
int kind;
|
||||
Py_ssize_t length;
|
||||
int strict;
|
||||
|
||||
if (PyUnicode_READY(pystr) == -1)
|
||||
return NULL;
|
||||
|
@ -1075,9 +1079,10 @@ scan_once_unicode(PyScannerObject *s, PyObject *pystr, Py_ssize_t idx, Py_ssize_
|
|||
switch (PyUnicode_READ(kind, str, idx)) {
|
||||
case '"':
|
||||
/* string */
|
||||
return scanstring_unicode(pystr, idx + 1,
|
||||
PyObject_IsTrue(s->strict),
|
||||
next_idx_ptr);
|
||||
strict = PyObject_IsTrue(s->strict);
|
||||
if (strict < 0)
|
||||
return NULL;
|
||||
return scanstring_unicode(pystr, idx + 1, strict, next_idx_ptr);
|
||||
case '{':
|
||||
/* object */
|
||||
if (Py_EnterRecursiveCall(" while decoding a JSON object "
|
||||
|
@ -1327,12 +1332,13 @@ encoder_init(PyObject *self, PyObject *args, PyObject *kwds)
|
|||
|
||||
PyEncoderObject *s;
|
||||
PyObject *markers, *defaultfn, *encoder, *indent, *key_separator;
|
||||
PyObject *item_separator, *sort_keys, *skipkeys, *allow_nan;
|
||||
PyObject *item_separator, *sort_keys, *skipkeys;
|
||||
int allow_nan;
|
||||
|
||||
assert(PyEncoder_Check(self));
|
||||
s = (PyEncoderObject *)self;
|
||||
|
||||
if (!PyArg_ParseTupleAndKeywords(args, kwds, "OOOOOOOOO:make_encoder", kwlist,
|
||||
if (!PyArg_ParseTupleAndKeywords(args, kwds, "OOOOOOOOp:make_encoder", kwlist,
|
||||
&markers, &defaultfn, &encoder, &indent, &key_separator, &item_separator,
|
||||
&sort_keys, &skipkeys, &allow_nan))
|
||||
return -1;
|
||||
|
@ -1353,7 +1359,7 @@ encoder_init(PyObject *self, PyObject *args, PyObject *kwds)
|
|||
s->fast_encode = f;
|
||||
}
|
||||
}
|
||||
s->allow_nan = PyObject_IsTrue(allow_nan);
|
||||
s->allow_nan = allow_nan;
|
||||
|
||||
Py_INCREF(s->markers);
|
||||
Py_INCREF(s->defaultfn);
|
||||
|
@ -1622,6 +1628,7 @@ encoder_listencode_dict(PyEncoderObject *s, _PyAccu *acc,
|
|||
PyObject *items;
|
||||
PyObject *item = NULL;
|
||||
int skipkeys;
|
||||
int sortkeys;
|
||||
Py_ssize_t idx;
|
||||
|
||||
if (open_dict == NULL || close_dict == NULL || empty_dict == NULL) {
|
||||
|
@ -1666,13 +1673,16 @@ encoder_listencode_dict(PyEncoderObject *s, _PyAccu *acc,
|
|||
items = PyMapping_Items(dct);
|
||||
if (items == NULL)
|
||||
goto bail;
|
||||
if (PyObject_IsTrue(s->sort_keys) && PyList_Sort(items) < 0)
|
||||
sortkeys = PyObject_IsTrue(s->sort_keys);
|
||||
if (sortkeys < 0 || (sortkeys && PyList_Sort(items) < 0))
|
||||
goto bail;
|
||||
it = PyObject_GetIter(items);
|
||||
Py_DECREF(items);
|
||||
if (it == NULL)
|
||||
goto bail;
|
||||
skipkeys = PyObject_IsTrue(s->skipkeys);
|
||||
if (skipkeys < 0)
|
||||
goto bail;
|
||||
idx = 0;
|
||||
while ((item = PyIter_Next(it)) != NULL) {
|
||||
PyObject *encoded, *key, *value;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue