]> granicus.if.org Git - python/commitdiff
Fixes reference leak (#3457)
authorSteve Dower <steve.dower@microsoft.com>
Fri, 8 Sep 2017 18:35:38 +0000 (11:35 -0700)
committerGitHub <noreply@github.com>
Fri, 8 Sep 2017 18:35:38 +0000 (11:35 -0700)
PC/_findvs.cpp

index 6c660115963806de87c8c0f41a7a49948ebccfb9..dd7c1fcb7236708820f52dc2014bdbab90e89e8f 100644 (file)
@@ -161,18 +161,26 @@ static PyObject *find_all_instances()
         PyObject *version = nullptr;
         PyObject *path = nullptr;
         PyObject *packages = nullptr;
+        PyObject *tuple = nullptr;
 
         if (FAILED(hr = inst->QueryInterface(&inst2)) ||
             !(name = get_install_name(inst2)) ||
             !(version = get_install_version(inst)) ||
             !(path = get_install_path(inst)) ||
             !(packages = get_installed_packages(inst2)) ||
-            PyList_Append(res, PyTuple_Pack(4, name, version, path, packages)) < 0)
+            !(tuple = PyTuple_Pack(4, name, version, path, packages)) ||
+            PyList_Append(res, tuple) < 0)
             goto iter_error;
 
+        Py_DECREF(tuple);
+        Py_DECREF(packages);
+        Py_DECREF(path);
+        Py_DECREF(version);
+        Py_DECREF(name);
         continue;
     iter_error:
         if (inst2) inst2->Release();
+        Py_XDECREF(tuple);
         Py_XDECREF(packages);
         Py_XDECREF(path);
         Py_XDECREF(version);