summaryrefslogtreecommitdiff
path: root/Parser
diff options
context:
space:
mode:
authorMartin v. Löwis <martin@v.loewis.de>2006-03-02 00:31:27 +0000
committerMartin v. Löwis <martin@v.loewis.de>2006-03-02 00:31:27 +0000
commite6964c67a6ce21aa14dc39d6b9fadc0160e30f47 (patch)
tree6ae7a3b52c1a573aae217da971346beb47eb6693 /Parser
parent43cb66f76069dd104c83a9577ab05c1133f0c9e7 (diff)
downloadcpython-e6964c67a6ce21aa14dc39d6b9fadc0160e30f47.tar.gz
Fix memory leak on attributes.
Diffstat (limited to 'Parser')
-rwxr-xr-xParser/asdl_c.py4
1 files changed, 3 insertions, 1 deletions
diff --git a/Parser/asdl_c.py b/Parser/asdl_c.py
index 3e2acf4372..ad2209d003 100755
--- a/Parser/asdl_c.py
+++ b/Parser/asdl_c.py
@@ -607,7 +607,9 @@ class ObjVisitor(PickleVisitor):
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):