From: Martin v. Löwis <martin@v.loewis.de>
Date: Fri, 29 May 2009 16:01:34 +0000 (+0000)
Subject: Merged revisions 73016 via svnmerge from
X-Git-Tag: v3.1rc1~10
X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=e23c8683a5e11307e4a3528826e0b84fa3fb5660;p=python

Merged revisions 73016 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk

........
  r73016 | martin.v.loewis | 2009-05-29 17:58:08 +0200 (Fr, 29 Mai 2009) | 2 lines

  Issue #4873: Fix resource leaks in error cases of pwd and grp.
........
---

diff --git a/Misc/NEWS b/Misc/NEWS
index 8cc76a258f..b98a368848 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -108,6 +108,8 @@ Installation
 Extension Modules
 -----------------
 
+- Issue #4873: Fix resource leaks in error cases of pwd and grp.
+
 - Issue #6093: Fix off-by-one error in locale.strxfrm.
 
 - The _functools and _locale modules are now built into the libpython shared
diff --git a/Modules/grpmodule.c b/Modules/grpmodule.c
index e642731f83..0dcef06c04 100644
--- a/Modules/grpmodule.c
+++ b/Modules/grpmodule.c
@@ -79,7 +79,6 @@ mkgrent(struct group *p)
 
     if (PyErr_Occurred()) {
         Py_DECREF(v);
-        Py_DECREF(w);
         return NULL;
     }
 
@@ -145,6 +144,7 @@ grp_getgrall(PyObject *self, PyObject *ignore)
         if (v == NULL || PyList_Append(d, v) != 0) {
             Py_XDECREF(v);
             Py_DECREF(d);
+            endgrent();
             return NULL;
         }
         Py_DECREF(v);
diff --git a/Modules/pwdmodule.c b/Modules/pwdmodule.c
index 5802818149..1547cdf27a 100644
--- a/Modules/pwdmodule.c
+++ b/Modules/pwdmodule.c
@@ -175,6 +175,7 @@ pwd_getpwall(PyObject *self)
 		if (v == NULL || PyList_Append(d, v) != 0) {
 			Py_XDECREF(v);
 			Py_DECREF(d);
+			endpwent();
 			return NULL;
 		}
 		Py_DECREF(v);