[Python-checkins] r42766 - in python/trunk: Parser/asdl_c.py Python/Python-ast.c
martin.v.loewis
python-checkins at python.org
Thu Mar 2 01:31:27 CET 2006
Author: martin.v.loewis
Date: Thu Mar 2 01:31:27 2006
New Revision: 42766
Modified:
python/trunk/Parser/asdl_c.py
python/trunk/Python/Python-ast.c
Log:
Fix memory leak on attributes.
Modified: python/trunk/Parser/asdl_c.py
==============================================================================
--- python/trunk/Parser/asdl_c.py (original)
+++ python/trunk/Parser/asdl_c.py Thu Mar 2 01:31:27 2006
@@ -607,7 +607,9 @@
for a in sum.attributes:
self.emit("value = ast2obj_%s(o->%s);" % (a.type, a.name), 1)
self.emit("if (!value) goto failed;", 1)
- self.emit('PyObject_SetAttrString(result, "%s", value);' % a.name, 1)
+ self.emit('if (PyObject_SetAttrString(result, "%s", value) < 0)' % a.name, 1)
+ self.emit('goto failed;', 2)
+ self.emit('Py_DECREF(value);', 1)
self.func_end()
def simpleSum(self, sum, name):
Modified: python/trunk/Python/Python-ast.c
==============================================================================
--- python/trunk/Python/Python-ast.c (original)
+++ python/trunk/Python/Python-ast.c Thu Mar 2 01:31:27 2006
@@ -2324,10 +2324,14 @@
}
value = ast2obj_int(o->lineno);
if (!value) goto failed;
- PyObject_SetAttrString(result, "lineno", value);
+ if (PyObject_SetAttrString(result, "lineno", value) < 0)
+ goto failed;
+ Py_DECREF(value);
value = ast2obj_int(o->col_offset);
if (!value) goto failed;
- PyObject_SetAttrString(result, "col_offset", value);
+ if (PyObject_SetAttrString(result, "col_offset", value) < 0)
+ goto failed;
+ Py_DECREF(value);
return result;
failed:
Py_XDECREF(value);
@@ -2643,10 +2647,14 @@
}
value = ast2obj_int(o->lineno);
if (!value) goto failed;
- PyObject_SetAttrString(result, "lineno", value);
+ if (PyObject_SetAttrString(result, "lineno", value) < 0)
+ goto failed;
+ Py_DECREF(value);
value = ast2obj_int(o->col_offset);
if (!value) goto failed;
- PyObject_SetAttrString(result, "col_offset", value);
+ if (PyObject_SetAttrString(result, "col_offset", value) < 0)
+ goto failed;
+ Py_DECREF(value);
return result;
failed:
Py_XDECREF(value);
@@ -3023,7 +3031,7 @@
if (PyDict_SetItemString(d, "AST", (PyObject*)AST_type) < 0) return;
if (PyModule_AddIntConstant(m, "PyCF_ONLY_AST", PyCF_ONLY_AST) < 0)
return;
- if (PyModule_AddStringConstant(m, "__version__", "42649") < 0)
+ if (PyModule_AddStringConstant(m, "__version__", "42753") < 0)
return;
if(PyDict_SetItemString(d, "mod", (PyObject*)mod_type) < 0) return;
if(PyDict_SetItemString(d, "Module", (PyObject*)Module_type) < 0)
More information about the Python-checkins
mailing list