mirror of
https://github.com/python/cpython
synced 2024-07-21 18:25:47 +00:00
SF patch #1020188: Use Py_CLEAR where necessary to avoid crashes
(Contributed by Dima Dorfman)
This commit is contained in:
parent
410eb84a5d
commit
75ccea3777
|
@ -623,7 +623,7 @@ PyAPI_FUNC(void) _Py_AddToAllObjects(PyObject *, int force);
|
|||
#define Py_CLEAR(op) \
|
||||
do { \
|
||||
if (op) { \
|
||||
PyObject *tmp = (op); \
|
||||
PyObject *tmp = (PyObject *)(op); \
|
||||
(op) = NULL; \
|
||||
Py_DECREF(tmp); \
|
||||
} \
|
||||
|
|
|
@ -250,8 +250,7 @@ _grouper_next(_grouperobject *igo)
|
|||
|
||||
r = gbo->currvalue;
|
||||
gbo->currvalue = NULL;
|
||||
Py_DECREF(gbo->currkey);
|
||||
gbo->currkey = NULL;
|
||||
Py_CLEAR(gbo->currkey);
|
||||
|
||||
return r;
|
||||
}
|
||||
|
|
|
@ -230,10 +230,7 @@ reversed_next(reversedobject *ro)
|
|||
PyErr_Clear();
|
||||
}
|
||||
ro->index = -1;
|
||||
if (ro->seq != NULL) {
|
||||
Py_DECREF(ro->seq);
|
||||
ro->seq = NULL;
|
||||
}
|
||||
Py_CLEAR(ro->seq);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
|
|
@ -51,8 +51,7 @@ gen_iternext(PyGenObject *gen)
|
|||
* may keep a chain of frames alive or it could create a reference
|
||||
* cycle. */
|
||||
assert(f->f_back != NULL);
|
||||
Py_DECREF(f->f_back);
|
||||
f->f_back = NULL;
|
||||
Py_CLEAR(f->f_back);
|
||||
|
||||
/* If the generator just returned (as opposed to yielding), signal
|
||||
* that the generator is exhausted. */
|
||||
|
|
|
@ -192,18 +192,14 @@ calliter_iternext(calliterobject *it)
|
|||
return result; /* Common case, fast path */
|
||||
Py_DECREF(result);
|
||||
if (ok > 0) {
|
||||
Py_DECREF(it->it_callable);
|
||||
it->it_callable = NULL;
|
||||
Py_DECREF(it->it_sentinel);
|
||||
it->it_sentinel = NULL;
|
||||
Py_CLEAR(it->it_callable);
|
||||
Py_CLEAR(it->it_sentinel);
|
||||
}
|
||||
}
|
||||
else if (PyErr_ExceptionMatches(PyExc_StopIteration)) {
|
||||
PyErr_Clear();
|
||||
Py_DECREF(it->it_callable);
|
||||
it->it_callable = NULL;
|
||||
Py_DECREF(it->it_sentinel);
|
||||
it->it_sentinel = NULL;
|
||||
Py_CLEAR(it->it_callable);
|
||||
Py_CLEAR(it->it_sentinel);
|
||||
}
|
||||
}
|
||||
return NULL;
|
||||
|
|
Loading…
Reference in a new issue