Blame SOURCES/quota-4.01-Close-FILE-handles-on-error.patch

dba0f0
From d26e316c3ffd4658b25f14ea1c42384f251c96de Mon Sep 17 00:00:00 2001
dba0f0
From: =?UTF-8?q?Petr=20P=C3=ADsa=C5=99?= <ppisar@redhat.com>
dba0f0
Date: Thu, 13 Jun 2013 16:11:30 +0200
dba0f0
Subject: [PATCH] Close FILE handles on error
dba0f0
dba0f0
Functions for reading quota specification in quotaops.c create new
dba0f0
temporary FILE stream handle, they close it on successful return,
dba0f0
but they forget to close it on unsuccessful return. That leads to
dba0f0
memory leaks. This patch ensures that the handle gets closed in all
dba0f0
cases.
dba0f0
---
dba0f0
 quotaops.c | 11 +++++++++++
dba0f0
 1 file changed, 11 insertions(+)
dba0f0
dba0f0
diff --git a/quotaops.c b/quotaops.c
dba0f0
index 175a945..47ef9a7 100644
dba0f0
--- a/quotaops.c
dba0f0
+++ b/quotaops.c
dba0f0
@@ -334,42 +334,49 @@ int readprivs(struct dquot *qlist, int infd)
dba0f0
 
dba0f0
 		if (cnt != 7) {
dba0f0
 			errstr(_("Bad format:\n%s\n"), line);
dba0f0
+			fclose(fd);
dba0f0
 			return -1;
dba0f0
 		}
dba0f0
 		error = str2space(blocksstring, &blocks;;
dba0f0
 		if (error) {
dba0f0
 			errstr(_("Bad block usage: %s: %s\n"),
dba0f0
 				blocksstring, error);
dba0f0
+			fclose(fd);
dba0f0
 			return -1;
dba0f0
 		}
dba0f0
 		error = str2space(bsoftstring, &bsoft);
dba0f0
 		if (error) {
dba0f0
 			errstr(_("Bad block soft limit: %s: %s\n"),
dba0f0
 				bsoftstring, error);
dba0f0
+			fclose(fd);
dba0f0
 			return -1;
dba0f0
 		}
dba0f0
 		error = str2space(bhardstring, &bhard);
dba0f0
 		if (error) {
dba0f0
 			errstr(_("Bad block hard limit: %s: %s\n"),
dba0f0
 				bhardstring, error);
dba0f0
+			fclose(fd);
dba0f0
 			return -1;
dba0f0
 		}
dba0f0
 		error = str2number(inodesstring, &inodes);
dba0f0
 		if (error) {
dba0f0
 			errstr(_("Bad inode usage: %s: %s\n"),
dba0f0
 				inodesstring, error);
dba0f0
+			fclose(fd);
dba0f0
 			return -1;
dba0f0
 		}
dba0f0
 		error = str2number(isoftstring, &isoft);
dba0f0
 		if (error) {
dba0f0
 			errstr(_("Bad inode soft limit: %s: %s\n"),
dba0f0
 				isoftstring, error);
dba0f0
+			fclose(fd);
dba0f0
 			return -1;
dba0f0
 		}
dba0f0
 		error = str2number(ihardstring, &ihard);
dba0f0
 		if (error) {
dba0f0
 			errstr(_("Bad inode hard limit: %s: %s\n"),
dba0f0
 				ihardstring, error);
dba0f0
+			fclose(fd);
dba0f0
 			return -1;
dba0f0
 		}
dba0f0
 
dba0f0
@@ -478,6 +485,7 @@ int readindividualtimes(struct dquot *qlist, int infd)
dba0f0
 		if (cnt != 3) {
dba0f0
 format_err:
dba0f0
 			errstr(_("bad format:\n%s\n"), line);
dba0f0
+			fclose(fd);
dba0f0
 			return -1;
dba0f0
 		}
dba0f0
 		if (!strcmp(btimestr, _("unset")))
dba0f0
@@ -488,6 +496,7 @@ format_err:
dba0f0
 			if (str2timeunits(btime, bunits, &bseconds) < 0) {
dba0f0
 units_err:
dba0f0
 				errstr(_("Bad time units. Units are 'second', 'minute', 'hour', and 'day'.\n"));
dba0f0
+				fclose(fd);
dba0f0
 				return -1;
dba0f0
 			}
dba0f0
 			bseconds += now;
dba0f0
@@ -576,11 +585,13 @@ int readtimes(struct quota_handle **handles, int infd)
dba0f0
 		cnt = sscanf(line, "%s %d %s %d %s", fsp, &btime, bunits, &itime, iunits);
dba0f0
 		if (cnt != 5) {
dba0f0
 			errstr(_("bad format:\n%s\n"), line);
dba0f0
+			fclose(fd);
dba0f0
 			return -1;
dba0f0
 		}
dba0f0
 		if (str2timeunits(btime, bunits, &bseconds) < 0 ||
dba0f0
 		    str2timeunits(itime, iunits, &iseconds) < 0) {
dba0f0
 			errstr(_("Bad time units. Units are 'second', 'minute', 'hour', and 'day'.\n"));
dba0f0
+			fclose(fd);
dba0f0
 			return -1;
dba0f0
 		}
dba0f0
 		for (i = 0; handles[i]; i++) {
dba0f0
-- 
dba0f0
1.8.1.4
dba0f0