mirror of
				https://github.com/python/cpython.git
				synced 2025-10-31 21:51:50 +00:00 
			
		
		
		
	gh-99537: Use Py_SETREF(var, NULL) in C code (#99687)
Replace "Py_DECREF(var); var = NULL;" with "Py_SETREF(var, NULL);".
This commit is contained in:
		
							parent
							
								
									5d9183c7ad
								
							
						
					
					
						commit
						81f7359f67
					
				
					 22 changed files with 44 additions and 87 deletions
				
			
		|  | @ -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); | ||||
|  |  | |||
|  | @ -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; | ||||
|  | @ -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 */ | ||||
|  | @ -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)); | ||||
|  | @ -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)); | ||||
|  |  | |||
|  | @ -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()) { | ||||
|  |  | |||
|  | @ -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) | ||||
|  |  | |||
|  | @ -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) { | ||||
|  |  | |||
|  | @ -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, | ||||
|  |  | |||
|  | @ -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; | ||||
|     } | ||||
| 
 | ||||
|  |  | |||
|  | @ -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); | ||||
|  |  | |||
|  | @ -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); | ||||
|  |  | |||
|  | @ -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; | ||||
|     } | ||||
|  |  | |||
|  | @ -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; | ||||
|  |  | |||
|  | @ -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 */ | ||||
|  | @ -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) { | ||||
|  | @ -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; | ||||
|         } | ||||
|  |  | |||
|  | @ -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); | ||||
|  |  | |||
|  | @ -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); | ||||
|  | @ -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; | ||||
|  |  | |||
|  | @ -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; | ||||
|     } | ||||
| 
 | ||||
|  | @ -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; | ||||
|     } | ||||
|  | @ -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; | ||||
| } | ||||
|  |  | |||
|  | @ -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! */ | ||||
|  | @ -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>", | ||||
|  |  | |||
|  | @ -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; | ||||
|  |  | |||
|  | @ -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"); | ||||
|     } | ||||
|  | @ -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"); | ||||
|         } | ||||
|  | @ -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"); | ||||
|         } | ||||
|  |  | |||
|  | @ -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) { | ||||
|  | @ -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)); | ||||
|  | @ -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) { | ||||
|  | @ -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) { | ||||
|  |  | |||
|  | @ -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; | ||||
|             } | ||||
|         } | ||||
|  | @ -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); | ||||
|  | @ -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) { | ||||
|  | @ -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; | ||||
|         } | ||||
|  |  | |||
|  | @ -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
 | ||||
|  |  | |||
|  | @ -1217,8 +1217,7 @@ r_object(RFILE *p) | |||
|                 if (!PyErr_Occurred()) | ||||
|                     PyErr_SetString(PyExc_TypeError, | ||||
|                         "NULL object in marshal data for tuple"); | ||||
|                 Py_DECREF(v); | ||||
|                 v = NULL; | ||||
|                 Py_SETREF(v, NULL); | ||||
|                 break; | ||||
|             } | ||||
|             PyTuple_SET_ITEM(v, i, v2); | ||||
|  | @ -1244,8 +1243,7 @@ r_object(RFILE *p) | |||
|                 if (!PyErr_Occurred()) | ||||
|                     PyErr_SetString(PyExc_TypeError, | ||||
|                         "NULL object in marshal data for list"); | ||||
|                 Py_DECREF(v); | ||||
|                 v = NULL; | ||||
|                 Py_SETREF(v, NULL); | ||||
|                 break; | ||||
|             } | ||||
|             PyList_SET_ITEM(v, i, v2); | ||||
|  | @ -1277,8 +1275,7 @@ r_object(RFILE *p) | |||
|             Py_DECREF(val); | ||||
|         } | ||||
|         if (PyErr_Occurred()) { | ||||
|             Py_DECREF(v); | ||||
|             v = NULL; | ||||
|             Py_SETREF(v, NULL); | ||||
|         } | ||||
|         retval = v; | ||||
|         break; | ||||
|  | @ -1322,8 +1319,7 @@ r_object(RFILE *p) | |||
|                     if (!PyErr_Occurred()) | ||||
|                         PyErr_SetString(PyExc_TypeError, | ||||
|                             "NULL object in marshal data for set"); | ||||
|                     Py_DECREF(v); | ||||
|                     v = NULL; | ||||
|                     Py_SETREF(v, NULL); | ||||
|                     break; | ||||
|                 } | ||||
|                 if (PySet_Add(v, v2) == -1) { | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Victor Stinner
						Victor Stinner