summaryrefslogtreecommitdiffstats
path: root/Modules
diff options
context:
space:
mode:
authorMiss Islington (bot) <31488909+miss-islington@users.noreply.github.com>2021-01-20 09:03:28 (GMT)
committerGitHub <noreply@github.com>2021-01-20 09:03:28 (GMT)
commit50938b63fbb0d4bed24dceccf188b8d0fe58463c (patch)
treef3f5d6c9ac1429eb45a945cbaf464e894395922a /Modules
parentc347cbe694743cee120457aa6626712f7799a932 (diff)
downloadcpython-50938b63fbb0d4bed24dceccf188b8d0fe58463c.zip
cpython-50938b63fbb0d4bed24dceccf188b8d0fe58463c.tar.gz
cpython-50938b63fbb0d4bed24dceccf188b8d0fe58463c.tar.bz2
bpo-41995: Handle allocation failure in _tracemalloc and _zoneinfo (GH-22635)
(cherry picked from commit f1ff800db1f9fa5ff8f2fa2863796a46bfa9ee46) Co-authored-by: Yunlongs <lylgood@foxmail.com>
Diffstat (limited to 'Modules')
-rw-r--r--Modules/_zoneinfo.c12
1 files changed, 12 insertions, 0 deletions
diff --git a/Modules/_zoneinfo.c b/Modules/_zoneinfo.c
index fafb6b0..d87a201 100644
--- a/Modules/_zoneinfo.c
+++ b/Modules/_zoneinfo.c
@@ -909,7 +909,13 @@ load_data(PyZoneInfo_ZoneInfo *self, PyObject *file_obj)
// Load the transition indices and list
self->trans_list_utc =
PyMem_Malloc(self->num_transitions * sizeof(int64_t));
+ if (self->trans_list_utc == NULL) {
+ goto error;
+ }
trans_idx = PyMem_Malloc(self->num_transitions * sizeof(Py_ssize_t));
+ if (trans_idx == NULL) {
+ goto error;
+ }
for (size_t i = 0; i < self->num_transitions; ++i) {
PyObject *num = PyTuple_GetItem(trans_utc, i);
@@ -991,6 +997,9 @@ load_data(PyZoneInfo_ZoneInfo *self, PyObject *file_obj)
// Build _ttinfo objects from utcoff, dstoff and abbr
self->_ttinfos = PyMem_Malloc(self->num_ttinfos * sizeof(_ttinfo));
+ if (self->_ttinfos == NULL) {
+ goto error;
+ }
for (size_t i = 0; i < self->num_ttinfos; ++i) {
PyObject *tzname = PyTuple_GetItem(abbr, i);
if (tzname == NULL) {
@@ -1006,6 +1015,9 @@ load_data(PyZoneInfo_ZoneInfo *self, PyObject *file_obj)
// Build our mapping from transition to the ttinfo that applies
self->trans_ttinfos =
PyMem_Calloc(self->num_transitions, sizeof(_ttinfo *));
+ if (self->trans_ttinfos == NULL) {
+ goto error;
+ }
for (size_t i = 0; i < self->num_transitions; ++i) {
size_t ttinfo_idx = trans_idx[i];
assert(ttinfo_idx < self->num_ttinfos);