gh-111789: Use PyDict_GetItemRef() in Modules/_zoneinfo.c (GH-112078)

This commit is contained in:
Serhiy Storchaka 2024-01-10 15:35:10 +02:00 committed by GitHub
parent be5e65fdf6
commit 183b97bb9d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 5 additions and 14 deletions

View File

@ -853,28 +853,19 @@ load_timedelta(zoneinfo_state *state, long seconds)
if (pyoffset == NULL) {
return NULL;
}
rv = PyDict_GetItemWithError(state->TIMEDELTA_CACHE, pyoffset);
if (rv == NULL) {
if (PyErr_Occurred()) {
goto error;
}
if (PyDict_GetItemRef(state->TIMEDELTA_CACHE, pyoffset, &rv) == 0) {
PyObject *tmp = PyDateTimeAPI->Delta_FromDelta(
0, seconds, 0, 1, PyDateTimeAPI->DeltaType);
if (tmp == NULL) {
goto error;
if (tmp != NULL) {
rv = PyDict_SetDefault(state->TIMEDELTA_CACHE, pyoffset, tmp);
Py_XINCREF(rv);
Py_DECREF(tmp);
}
rv = PyDict_SetDefault(state->TIMEDELTA_CACHE, pyoffset, tmp);
Py_DECREF(tmp);
}
Py_XINCREF(rv);
Py_DECREF(pyoffset);
return rv;
error:
Py_DECREF(pyoffset);
return NULL;
}
/* Constructor for _ttinfo object - this starts by initializing the _ttinfo