Skip to content

gh-99537: Use Py_SETREF(var, NULL) in C code #99687

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Nov 23, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 1 addition & 2 deletions Modules/_abc.c
Original file line number Diff line number Diff line change
Expand Up @@ -624,8 +624,7 @@ _abc__abc_instancecheck_impl(PyObject *module, PyObject *self,

switch (PyObject_IsTrue(result)) {
case -1:
Py_DECREF(result);
result = NULL;
Py_SETREF(result, NULL);
break;
case 0:
Py_DECREF(result);
Expand Down
12 changes: 4 additions & 8 deletions Modules/_datetimemodule.c
Original file line number Diff line number Diff line change
Expand Up @@ -1328,8 +1328,7 @@ call_tzname(PyObject *tzinfo, PyObject *tzinfoarg)
PyErr_Format(PyExc_TypeError, "tzinfo.tzname() must "
"return None or a string, not '%s'",
Py_TYPE(result)->tp_name);
Py_DECREF(result);
result = NULL;
Py_SETREF(result, NULL);
}

return result;
Expand Down Expand Up @@ -1849,8 +1848,7 @@ delta_to_microseconds(PyDateTime_Delta *self)
x2 = PyNumber_Multiply(x1, seconds_per_day); /* days in seconds */
if (x2 == NULL)
goto Done;
Py_DECREF(x1);
x1 = NULL;
Py_SETREF(x1, NULL);

/* x2 has days in seconds */
x1 = PyLong_FromLong(GET_TD_SECONDS(self)); /* seconds */
Expand All @@ -1867,8 +1865,7 @@ delta_to_microseconds(PyDateTime_Delta *self)
x1 = PyNumber_Multiply(x3, us_per_second); /* us */
if (x1 == NULL)
goto Done;
Py_DECREF(x3);
x3 = NULL;
Py_SETREF(x3, NULL);

/* x1 has days+seconds in us */
x2 = PyLong_FromLong(GET_TD_MICROSECONDS(self));
Expand Down Expand Up @@ -2038,8 +2035,7 @@ multiply_truedivide_timedelta_float(PyDateTime_Delta *delta, PyObject *floatobj,
goto error;
}
temp = PyNumber_Multiply(pyus_in, PyTuple_GET_ITEM(ratio, op));
Py_DECREF(pyus_in);
pyus_in = NULL;
Py_SETREF(pyus_in, NULL);
if (temp == NULL)
goto error;
pyus_out = divide_nearest(temp, PyTuple_GET_ITEM(ratio, !op));
Expand Down
3 changes: 1 addition & 2 deletions Modules/_elementtree.c
Original file line number Diff line number Diff line change
Expand Up @@ -345,8 +345,7 @@ get_attrib_from_keywords(PyObject *kwds)
}
attrib = PyDict_Copy(attrib);
if (attrib && PyDict_DelItem(kwds, attrib_str) < 0) {
Py_DECREF(attrib);
attrib = NULL;
Py_SETREF(attrib, NULL);
}
}
else if (!PyErr_Occurred()) {
Expand Down
3 changes: 1 addition & 2 deletions Modules/_io/_iomodule.c
Original file line number Diff line number Diff line change
Expand Up @@ -334,8 +334,7 @@ _io_open_impl(PyObject *module, PyObject *file, const char *mode,
goto error;
result = raw;

Py_DECREF(path_or_fd);
path_or_fd = NULL;
Py_SETREF(path_or_fd, NULL);

modeobj = PyUnicode_FromString(mode);
if (modeobj == NULL)
Expand Down
3 changes: 1 addition & 2 deletions Modules/_pickle.c
Original file line number Diff line number Diff line change
Expand Up @@ -4344,8 +4344,7 @@ save(PicklerObject *self, PyObject *obj, int pers_save)
if (reduce_value != Py_NotImplemented) {
goto reduce;
}
Py_DECREF(reduce_value);
reduce_value = NULL;
Py_SETREF(reduce_value, NULL);
}

if (type == &PyType_Type) {
Expand Down
2 changes: 1 addition & 1 deletion Modules/_scproxy.c
Original file line number Diff line number Diff line change
Expand Up @@ -84,7 +84,7 @@ get_proxy_settings(PyObject* Py_UNUSED(mod), PyObject *Py_UNUSED(ignored))
if (v == NULL) goto error;

r = PyDict_SetItemString(result, "exclude_simple", v);
Py_DECREF(v); v = NULL;
Py_SETREF(v, NULL);
if (r == -1) goto error;

anArray = CFDictionaryGetValue(proxyDict,
Expand Down
3 changes: 1 addition & 2 deletions Modules/_struct.c
Original file line number Diff line number Diff line change
Expand Up @@ -2164,8 +2164,7 @@ cache_struct_converter(PyObject *module, PyObject *fmt, PyStructObject **ptr)
_structmodulestate *state = get_struct_state(module);

if (fmt == NULL) {
Py_DECREF(*ptr);
*ptr = NULL;
Py_SETREF(*ptr, NULL);
return 1;
}

Expand Down
3 changes: 1 addition & 2 deletions Modules/_tkinter.c
Original file line number Diff line number Diff line change
Expand Up @@ -2163,8 +2163,7 @@ _tkinter_tkapp_splitlist(TkappObject *self, PyObject *arg)
for (i = 0; i < argc; i++) {
PyObject *s = unicodeFromTclString(argv[i]);
if (!s) {
Py_DECREF(v);
v = NULL;
Py_SETREF(v, NULL);
goto finally;
}
PyTuple_SET_ITEM(v, i, s);
Expand Down
3 changes: 1 addition & 2 deletions Modules/_xxsubinterpretersmodule.c
Original file line number Diff line number Diff line change
Expand Up @@ -2320,8 +2320,7 @@ channel_list_all(PyObject *self, PyObject *Py_UNUSED(ignored))
PyObject *id = (PyObject *)newchannelid(&ChannelIDtype, *cur, 0,
&_globals.channels, 0, 0);
if (id == NULL) {
Py_DECREF(ids);
ids = NULL;
Py_SETREF(ids, NULL);
break;
}
PyList_SET_ITEM(ids, (Py_ssize_t)i, id);
Expand Down
3 changes: 1 addition & 2 deletions Modules/_zoneinfo.c
Original file line number Diff line number Diff line change
Expand Up @@ -220,8 +220,7 @@ zoneinfo_new_instance(PyTypeObject *type, PyObject *key)
}

PyObject *rv = PyObject_CallMethod(file_obj, "close", NULL);
Py_DECREF(file_obj);
file_obj = NULL;
Py_SETREF(file_obj, NULL);
if (rv == NULL) {
goto error;
}
Expand Down
3 changes: 1 addition & 2 deletions Modules/cjkcodecs/multibytecodec.c
Original file line number Diff line number Diff line change
Expand Up @@ -1463,8 +1463,7 @@ mbstreamreader_iread(MultibyteStreamReaderObject *self,
goto errorexit;
}

Py_DECREF(cres);
cres = NULL;
Py_SETREF(cres, NULL);

if (sizehint < 0 || buf.writer.pos != 0 || rsize == 0)
break;
Expand Down
9 changes: 3 additions & 6 deletions Modules/mathmodule.c
Original file line number Diff line number Diff line change
Expand Up @@ -3152,8 +3152,7 @@ math_prod_impl(PyObject *module, PyObject *iterable, PyObject *start)
long i_result = PyLong_AsLongAndOverflow(result, &overflow);
/* If this already overflowed, don't even enter the loop. */
if (overflow == 0) {
Py_DECREF(result);
result = NULL;
Py_SETREF(result, NULL);
}
/* Loop over all the items in the iterable until we finish, we overflow
* or we found a non integer element */
Expand Down Expand Up @@ -3200,8 +3199,7 @@ math_prod_impl(PyObject *module, PyObject *iterable, PyObject *start)
*/
if (PyFloat_CheckExact(result)) {
double f_result = PyFloat_AS_DOUBLE(result);
Py_DECREF(result);
result = NULL;
Py_SETREF(result, NULL);
while(result == NULL) {
item = PyIter_Next(iter);
if (item == NULL) {
Expand Down Expand Up @@ -3250,8 +3248,7 @@ math_prod_impl(PyObject *module, PyObject *iterable, PyObject *start)
if (item == NULL) {
/* error, or end-of-sequence */
if (PyErr_Occurred()) {
Py_DECREF(result);
result = NULL;
Py_SETREF(result, NULL);
}
break;
}
Expand Down
3 changes: 1 addition & 2 deletions Modules/nismodule.c
Original file line number Diff line number Diff line change
Expand Up @@ -458,8 +458,7 @@ nis_maps (PyObject *module, PyObject *args, PyObject *kwdict)
if (!str || PyList_Append(list, str) < 0)
{
Py_XDECREF(str);
Py_DECREF(list);
list = NULL;
Py_SETREF(list, NULL);
break;
}
Py_DECREF(str);
Expand Down
12 changes: 4 additions & 8 deletions Modules/posixmodule.c
Original file line number Diff line number Diff line change
Expand Up @@ -4036,14 +4036,12 @@ _listdir_windows_no_opendir(path_t *path, PyObject *list)
Py_SETREF(v, PyUnicode_EncodeFSDefault(v));
}
if (v == NULL) {
Py_DECREF(list);
list = NULL;
Py_SETREF(list, NULL);
break;
}
if (PyList_Append(list, v) != 0) {
Py_DECREF(v);
Py_DECREF(list);
list = NULL;
Py_SETREF(list, NULL);
break;
}
Py_DECREF(v);
Expand Down Expand Up @@ -13131,15 +13129,13 @@ os_listxattr_impl(PyObject *module, path_t *path, int follow_symlinks)
PyObject *attribute = PyUnicode_DecodeFSDefaultAndSize(start,
trace - start);
if (!attribute) {
Py_DECREF(result);
result = NULL;
Py_SETREF(result, NULL);
goto exit;
}
error = PyList_Append(result, attribute);
Py_DECREF(attribute);
if (error) {
Py_DECREF(result);
result = NULL;
Py_SETREF(result, NULL);
goto exit;
}
start = trace + 1;
Expand Down
9 changes: 3 additions & 6 deletions Objects/abstract.c
Original file line number Diff line number Diff line change
Expand Up @@ -806,8 +806,7 @@ PyObject_Format(PyObject *obj, PyObject *format_spec)
PyErr_Format(PyExc_TypeError,
"__format__ must return a str, not %.200s",
Py_TYPE(result)->tp_name);
Py_DECREF(result);
result = NULL;
Py_SETREF(result, NULL);
goto done;
}

Expand Down Expand Up @@ -2791,8 +2790,7 @@ PyObject_GetIter(PyObject *o)
"iter() returned non-iterator "
"of type '%.100s'",
Py_TYPE(res)->tp_name);
Py_DECREF(res);
res = NULL;
Py_SETREF(res, NULL);
}
return res;
}
Expand All @@ -2812,8 +2810,7 @@ PyObject_GetAIter(PyObject *o) {
PyErr_Format(PyExc_TypeError,
"aiter() returned not an async iterator of type '%.100s'",
Py_TYPE(it)->tp_name);
Py_DECREF(it);
it = NULL;
Py_SETREF(it, NULL);
}
return it;
}
Expand Down
6 changes: 2 additions & 4 deletions Objects/classobject.c
Original file line number Diff line number Diff line change
Expand Up @@ -283,8 +283,7 @@ method_repr(PyMethodObject *a)
}

if (funcname != NULL && !PyUnicode_Check(funcname)) {
Py_DECREF(funcname);
funcname = NULL;
Py_SETREF(funcname, NULL);
}

/* XXX Shouldn't use repr()/%R here! */
Expand Down Expand Up @@ -484,8 +483,7 @@ instancemethod_repr(PyObject *self)
return NULL;
}
if (funcname != NULL && !PyUnicode_Check(funcname)) {
Py_DECREF(funcname);
funcname = NULL;
Py_SETREF(funcname, NULL);
}

result = PyUnicode_FromFormat("<instancemethod %V at %p>",
Expand Down
3 changes: 1 addition & 2 deletions Objects/descrobject.c
Original file line number Diff line number Diff line change
Expand Up @@ -906,8 +906,7 @@ descr_new(PyTypeObject *descrtype, PyTypeObject *type, const char *name)
descr->d_type = (PyTypeObject*)Py_XNewRef(type);
descr->d_name = PyUnicode_InternFromString(name);
if (descr->d_name == NULL) {
Py_DECREF(descr);
descr = NULL;
Py_SETREF(descr, NULL);
}
else {
descr->d_qualname = NULL;
Expand Down
9 changes: 3 additions & 6 deletions Objects/fileobject.c
Original file line number Diff line number Diff line change
Expand Up @@ -67,8 +67,7 @@ PyFile_GetLine(PyObject *f, int n)
}
if (result != NULL && !PyBytes_Check(result) &&
!PyUnicode_Check(result)) {
Py_DECREF(result);
result = NULL;
Py_SETREF(result, NULL);
PyErr_SetString(PyExc_TypeError,
"object.readline() returned non-string");
}
Expand All @@ -77,8 +76,7 @@ PyFile_GetLine(PyObject *f, int n)
const char *s = PyBytes_AS_STRING(result);
Py_ssize_t len = PyBytes_GET_SIZE(result);
if (len == 0) {
Py_DECREF(result);
result = NULL;
Py_SETREF(result, NULL);
PyErr_SetString(PyExc_EOFError,
"EOF when reading a line");
}
Expand All @@ -95,8 +93,7 @@ PyFile_GetLine(PyObject *f, int n)
if (n < 0 && result != NULL && PyUnicode_Check(result)) {
Py_ssize_t len = PyUnicode_GET_LENGTH(result);
if (len == 0) {
Py_DECREF(result);
result = NULL;
Py_SETREF(result, NULL);
PyErr_SetString(PyExc_EOFError,
"EOF when reading a line");
}
Expand Down
12 changes: 4 additions & 8 deletions Objects/typeobject.c
Original file line number Diff line number Diff line change
Expand Up @@ -1213,8 +1213,7 @@ type_repr(PyTypeObject *type)
if (mod == NULL)
PyErr_Clear();
else if (!PyUnicode_Check(mod)) {
Py_DECREF(mod);
mod = NULL;
Py_SETREF(mod, NULL);
}
name = type_qualname(type, NULL);
if (name == NULL) {
Expand Down Expand Up @@ -1288,8 +1287,7 @@ type_call(PyTypeObject *type, PyObject *args, PyObject *kwds)
int res = type->tp_init(obj, args, kwds);
if (res < 0) {
assert(_PyErr_Occurred(tstate));
Py_DECREF(obj);
obj = NULL;
Py_SETREF(obj, NULL);
}
else {
assert(!_PyErr_Occurred(tstate));
Expand Down Expand Up @@ -5007,8 +5005,7 @@ object_repr(PyObject *self)
if (mod == NULL)
PyErr_Clear();
else if (!PyUnicode_Check(mod)) {
Py_DECREF(mod);
mod = NULL;
Py_SETREF(mod, NULL);
}
name = type_qualname(type, NULL);
if (name == NULL) {
Expand Down Expand Up @@ -8107,8 +8104,7 @@ slot_tp_hash(PyObject *self)
func = lookup_maybe_method(self, &_Py_ID(__hash__), &unbound);

if (func == Py_None) {
Py_DECREF(func);
func = NULL;
Py_SETREF(func, NULL);
}

if (func == NULL) {
Expand Down
12 changes: 4 additions & 8 deletions Python/bltinmodule.c
Original file line number Diff line number Diff line change
Expand Up @@ -218,8 +218,7 @@ builtin___build_class__(PyObject *self, PyObject *const *args, Py_ssize_t nargs,
"__class__ set to %.200R defining %.200R as %.200R";
PyErr_Format(PyExc_TypeError, msg, cell_cls, name, cls);
}
Py_DECREF(cls);
cls = NULL;
Py_SETREF(cls, NULL);
goto error;
}
}
Expand Down Expand Up @@ -2483,8 +2482,7 @@ builtin_sum_impl(PyObject *module, PyObject *iterable, PyObject *start)
long i_result = PyLong_AsLongAndOverflow(result, &overflow);
/* If this already overflowed, don't even enter the loop. */
if (overflow == 0) {
Py_DECREF(result);
result = NULL;
Py_SETREF(result, NULL);
}
while(result == NULL) {
item = PyIter_Next(iter);
Expand Down Expand Up @@ -2534,8 +2532,7 @@ builtin_sum_impl(PyObject *module, PyObject *iterable, PyObject *start)

if (PyFloat_CheckExact(result)) {
double f_result = PyFloat_AS_DOUBLE(result);
Py_DECREF(result);
result = NULL;
Py_SETREF(result, NULL);
while(result == NULL) {
item = PyIter_Next(iter);
if (item == NULL) {
Expand Down Expand Up @@ -2582,8 +2579,7 @@ builtin_sum_impl(PyObject *module, PyObject *iterable, PyObject *start)
if (item == NULL) {
/* error, or end-of-sequence */
if (PyErr_Occurred()) {
Py_DECREF(result);
result = NULL;
Py_SETREF(result, NULL);
}
break;
}
Expand Down
3 changes: 1 addition & 2 deletions Python/errors.c
Original file line number Diff line number Diff line change
Expand Up @@ -37,8 +37,7 @@ _PyErr_Restore(PyThreadState *tstate, PyObject *type, PyObject *value,
if (traceback != NULL && !PyTraceBack_Check(traceback)) {
/* XXX Should never happen -- fatal error instead? */
/* Well, it could be None. */
Py_DECREF(traceback);
traceback = NULL;
Py_SETREF(traceback, NULL);
}

/* Save these in locals to safeguard against recursive
Expand Down
Loading