f686d7
From 7f28151c0b6bca5cb60f56e9a17ccb2fd9665269 Mon Sep 17 00:00:00 2001
f686d7
From: Oliver Kiddle <okiddle@yahoo.co.uk>
f686d7
Date: Sat, 7 Apr 2018 18:28:38 +0200
f686d7
Subject: [PATCH] 42607, CVE-2018-1100: check bounds on buffer in mail checking
f686d7
f686d7
Upstream-commit: 31f72205630687c1cef89347863aab355296a27f
f686d7
Signed-off-by: Kamil Dudka <kdudka@redhat.com>
f686d7
---
f686d7
 Src/utils.c | 8 +++++---
f686d7
 1 file changed, 5 insertions(+), 3 deletions(-)
f686d7
f686d7
diff --git a/Src/utils.c b/Src/utils.c
f686d7
index c6eba63..41ec45c 100644
f686d7
--- a/Src/utils.c
f686d7
+++ b/Src/utils.c
f686d7
@@ -1419,7 +1419,7 @@ checkmailpath(char **s)
f686d7
 	    LinkList l;
f686d7
 	    DIR *lock = opendir(unmeta(*s));
f686d7
 	    char buf[PATH_MAX * 2], **arr, **ap;
f686d7
-	    int ct = 1;
f686d7
+	    int buflen, ct = 1;
f686d7
 
f686d7
 	    if (lock) {
f686d7
 		char *fn;
f686d7
@@ -1428,9 +1428,11 @@ checkmailpath(char **s)
f686d7
 		l = newlinklist();
f686d7
 		while ((fn = zreaddir(lock, 1)) && !errflag) {
f686d7
 		    if (u)
f686d7
-			sprintf(buf, "%s/%s?%s", *s, fn, u);
f686d7
+			buflen = snprintf(buf, sizeof(buf), "%s/%s?%s", *s, fn, u);
f686d7
 		    else
f686d7
-			sprintf(buf, "%s/%s", *s, fn);
f686d7
+			buflen = snprintf(buf, sizeof(buf), "%s/%s", *s, fn);
f686d7
+		    if (buflen < 0 || buflen >= (int)sizeof(buf))
f686d7
+			continue;
f686d7
 		    addlinknode(l, dupstring(buf));
f686d7
 		    ct++;
f686d7
 		}
f686d7
-- 
f686d7
2.14.3
f686d7