summaryrefslogtreecommitdiffstats
path: root/Python
diff options
context:
space:
mode:
authorVictor Stinner <victor.stinner@gmail.com>2013-07-16 22:57:58 (GMT)
committerVictor Stinner <victor.stinner@gmail.com>2013-07-16 22:57:58 (GMT)
commit43d8195a704686842185b1821d2b26aa8210cc00 (patch)
tree8503f2e8c7437a3bc864ad230068f6f1de831727 /Python
parentd594f24fbc4c414abd7a9dc6d3f5a60f6b72a48f (diff)
downloadcpython-43d8195a704686842185b1821d2b26aa8210cc00.zip
cpython-43d8195a704686842185b1821d2b26aa8210cc00.tar.gz
cpython-43d8195a704686842185b1821d2b26aa8210cc00.tar.bz2
Issue #18408: Handle PyArena_AddPyObject() failure in ast.c
PyList_Append() (called by PyArena_AddPyObject()) can fail because of a MemoryError for example.
Diffstat (limited to 'Python')
-rw-r--r--Python/ast.c25
1 files changed, 20 insertions, 5 deletions
diff --git a/Python/ast.c b/Python/ast.c
index 4d517b7..afdb199 100644
--- a/Python/ast.c
+++ b/Python/ast.c
@@ -560,7 +560,10 @@ new_identifier(const char *n, struct compiling *c)
id = id2;
}
PyUnicode_InternInPlace(&id);
- PyArena_AddPyObject(c->c_arena, id);
+ if (PyArena_AddPyObject(c->c_arena, id) < 0) {
+ Py_DECREF(id);
+ return NULL;
+ }
return id;
}
@@ -1847,7 +1850,10 @@ ast_for_atom(struct compiling *c, const node *n)
}
return NULL;
}
- PyArena_AddPyObject(c->c_arena, str);
+ if (PyArena_AddPyObject(c->c_arena, str) < 0) {
+ Py_DECREF(str);
+ return NULL;
+ }
if (bytesmode)
return Bytes(str, LINENO(n), n->n_col_offset, c->c_arena);
else
@@ -1858,7 +1864,10 @@ ast_for_atom(struct compiling *c, const node *n)
if (!pynum)
return NULL;
- PyArena_AddPyObject(c->c_arena, pynum);
+ if (PyArena_AddPyObject(c->c_arena, pynum) < 0) {
+ Py_DECREF(pynum);
+ return NULL;
+ }
return Num(pynum, LINENO(n), n->n_col_offset, c->c_arena);
}
case ELLIPSIS: /* Ellipsis */
@@ -2845,13 +2854,19 @@ alias_for_import_name(struct compiling *c, const node *n, int store)
return NULL;
str = uni;
PyUnicode_InternInPlace(&str);
- PyArena_AddPyObject(c->c_arena, str);
+ if (PyArena_AddPyObject(c->c_arena, str) < 0) {
+ Py_DECREF(str);
+ return NULL;
+ }
return alias(str, NULL, c->c_arena);
}
break;
case STAR:
str = PyUnicode_InternFromString("*");
- PyArena_AddPyObject(c->c_arena, str);
+ if (PyArena_AddPyObject(c->c_arena, str) < 0) {
+ Py_DECREF(str);
+ return NULL;
+ }
return alias(str, NULL, c->c_arena);
default:
PyErr_Format(PyExc_SystemError,