[Python-checkins] cpython: Issue #18408: ste_new() initialize all attributes before handling error
victor.stinner
python-checkins at python.org
Thu Jul 11 23:12:09 CEST 2013
http://hg.python.org/cpython/rev/39eb1ce5f377
changeset: 84562:39eb1ce5f377
user: Victor Stinner <victor.stinner at gmail.com>
date: Thu Jul 11 22:49:00 2013 +0200
summary:
Issue #18408: ste_new() initialize all attributes before handling error
If an attribute is not initialized, the destructor can crash
files:
Python/symtable.c | 22 +++++++++-------------
1 files changed, 9 insertions(+), 13 deletions(-)
diff --git a/Python/symtable.c b/Python/symtable.c
--- a/Python/symtable.c
+++ b/Python/symtable.c
@@ -37,25 +37,13 @@
ste->ste_table = st;
ste->ste_id = k; /* ste owns reference to k */
+ Py_INCREF(name);
ste->ste_name = name;
- Py_INCREF(name);
ste->ste_symbols = NULL;
ste->ste_varnames = NULL;
ste->ste_children = NULL;
- ste->ste_symbols = PyDict_New();
- if (ste->ste_symbols == NULL)
- goto fail;
-
- ste->ste_varnames = PyList_New(0);
- if (ste->ste_varnames == NULL)
- goto fail;
-
- ste->ste_children = PyList_New(0);
- if (ste->ste_children == NULL)
- goto fail;
-
ste->ste_directives = NULL;
ste->ste_type = block;
@@ -79,6 +67,14 @@
ste->ste_returns_value = 0;
ste->ste_needs_class_closure = 0;
+ ste->ste_symbols = PyDict_New();
+ ste->ste_varnames = PyList_New(0);
+ ste->ste_children = PyList_New(0);
+ if (ste->ste_symbols == NULL
+ || ste->ste_varnames == NULL
+ || ste->ste_children == NULL)
+ goto fail;
+
if (PyDict_SetItem(st->st_blocks, ste->ste_id, (PyObject *)ste) < 0)
goto fail;
--
Repository URL: http://hg.python.org/cpython
More information about the Python-checkins
mailing list