|
|
d80c97b |
From a431ffcc27b364b7cc2b280ad33873e0157e7e99 Mon Sep 17 00:00:00 2001
|
|
|
d80c97b |
From: "Dmitry V. Levin" <ldv@altlinux.org>
|
|
|
d80c97b |
Date: Thu, 18 May 2017 12:29:50 +0300
|
|
|
d80c97b |
Subject: [PATCH] quotaops: check return code of fgets calls
|
|
|
d80c97b |
MIME-Version: 1.0
|
|
|
d80c97b |
Content-Type: text/plain; charset=UTF-8
|
|
|
d80c97b |
Content-Transfer-Encoding: 8bit
|
|
|
d80c97b |
|
|
|
d80c97b |
fgets can return NULL anytime, do not ignore it.
|
|
|
d80c97b |
|
|
|
d80c97b |
Signed-off-by: Dmitry V. Levin <ldv@altlinux.org>
|
|
|
d80c97b |
Signed-off-by: Jan Kara <jack@suse.cz>
|
|
|
d80c97b |
Signed-off-by: Petr Písař <ppisar@redhat.com>
|
|
|
d80c97b |
---
|
|
|
d80c97b |
quotaops.c | 28 ++++++++++++++++++++--------
|
|
|
d80c97b |
1 file changed, 20 insertions(+), 8 deletions(-)
|
|
|
d80c97b |
|
|
|
d80c97b |
diff --git a/quotaops.c b/quotaops.c
|
|
|
d80c97b |
index 5e6026e..6f245b7 100644
|
|
|
d80c97b |
--- a/quotaops.c
|
|
|
d80c97b |
+++ b/quotaops.c
|
|
|
d80c97b |
@@ -330,8 +330,12 @@ int readprivs(struct dquot *qlist, int infd)
|
|
|
d80c97b |
/*
|
|
|
d80c97b |
* Discard title lines, then read lines to process.
|
|
|
d80c97b |
*/
|
|
|
d80c97b |
- fgets(line, sizeof(line), fd);
|
|
|
d80c97b |
- fgets(line, sizeof(line), fd);
|
|
|
d80c97b |
+ if (!fgets(line, sizeof(line), fd) ||
|
|
|
d80c97b |
+ !fgets(line, sizeof(line), fd)) {
|
|
|
d80c97b |
+ errstr(_("Bad format: two title lines assumed\n"));
|
|
|
d80c97b |
+ fclose(fd);
|
|
|
d80c97b |
+ return -1;
|
|
|
d80c97b |
+ }
|
|
|
d80c97b |
|
|
|
d80c97b |
while (fgets(line, sizeof(line), fd)) {
|
|
|
d80c97b |
cnt = sscanf(line, "%s %s %s %s %s %s %s",
|
|
|
d80c97b |
@@ -481,9 +485,13 @@ int readindividualtimes(struct dquot *qlist, int infd)
|
|
|
d80c97b |
/*
|
|
|
d80c97b |
* Discard title lines, then read lines to process.
|
|
|
d80c97b |
*/
|
|
|
d80c97b |
- fgets(line, sizeof(line), fd);
|
|
|
d80c97b |
- fgets(line, sizeof(line), fd);
|
|
|
d80c97b |
- fgets(line, sizeof(line), fd);
|
|
|
d80c97b |
+ if (!fgets(line, sizeof(line), fd) ||
|
|
|
d80c97b |
+ !fgets(line, sizeof(line), fd) ||
|
|
|
d80c97b |
+ !fgets(line, sizeof(line), fd)) {
|
|
|
d80c97b |
+ errstr(_("Bad format: three title lines assumed\n"));
|
|
|
d80c97b |
+ fclose(fd);
|
|
|
d80c97b |
+ return -1;
|
|
|
d80c97b |
+ }
|
|
|
d80c97b |
|
|
|
d80c97b |
time(&now;;
|
|
|
d80c97b |
while (fgets(line, sizeof(line), fd)) {
|
|
|
d80c97b |
@@ -583,9 +591,13 @@ int readtimes(struct quota_handle **handles, int infd)
|
|
|
d80c97b |
/*
|
|
|
d80c97b |
* Discard three title lines, then read lines to process.
|
|
|
d80c97b |
*/
|
|
|
d80c97b |
- fgets(line, sizeof(line), fd);
|
|
|
d80c97b |
- fgets(line, sizeof(line), fd);
|
|
|
d80c97b |
- fgets(line, sizeof(line), fd);
|
|
|
d80c97b |
+ if (!fgets(line, sizeof(line), fd) ||
|
|
|
d80c97b |
+ !fgets(line, sizeof(line), fd) ||
|
|
|
d80c97b |
+ !fgets(line, sizeof(line), fd)) {
|
|
|
d80c97b |
+ errstr(_("Bad format: three title lines assumed\n"));
|
|
|
d80c97b |
+ fclose(fd);
|
|
|
d80c97b |
+ return -1;
|
|
|
d80c97b |
+ }
|
|
|
d80c97b |
|
|
|
d80c97b |
while (fgets(line, sizeof(line), fd)) {
|
|
|
d80c97b |
cnt = sscanf(line, "%s %d %s %d %s", fsp, &btime, bunits, &itime, iunits);
|
|
|
d80c97b |
--
|
|
|
d80c97b |
2.9.4
|
|
|
d80c97b |
|