]> granicus.if.org Git - python/commitdiff
Issue #19437: Fix _io._IOBase.close(), handle _PyObject_SetAttrId() failure
authorVictor Stinner <victor.stinner@gmail.com>
Thu, 7 Nov 2013 23:29:41 +0000 (00:29 +0100)
committerVictor Stinner <victor.stinner@gmail.com>
Thu, 7 Nov 2013 23:29:41 +0000 (00:29 +0100)
Modules/_io/iobase.c

index b58687e3301a47072277060be1fba21af3337766..3da7e5d89c36c4e0474713c9a7a0afab1993fda0 100644 (file)
@@ -186,11 +186,16 @@ iobase_close(PyObject *self, PyObject *args)
         Py_RETURN_NONE;
 
     res = PyObject_CallMethodObjArgs(self, _PyIO_str_flush, NULL);
-    _PyObject_SetAttrId(self, &PyId___IOBase_closed, Py_True);
-    if (res == NULL) {
+
+    if (_PyObject_SetAttrId(self, &PyId___IOBase_closed, Py_True) < 0) {
+        Py_XDECREF(res);
         return NULL;
     }
-    Py_XDECREF(res);
+
+    if (res == NULL)
+        return NULL;
+
+    Py_DECREF(res);
     Py_RETURN_NONE;
 }