Blob Blame History Raw
commit 3ae65dc9a1c78c3088a08091f5d948fbbb8929af
Author: Jakub Jelen <jjelen@redhat.com>
Date:   Tue Feb 23 17:28:15 2016 +0100

    tcp_wrappers-7.6-xgets.patch

diff --git a/misc.c b/misc.c
index b248a5d..204546c 100644
--- a/misc.c
+++ b/misc.c
@@ -35,20 +35,32 @@ FILE   *fp;
 {
     int     got;
     char   *start = ptr;
+    int     c, last;
 
-    while (fgets(ptr, len, fp)) {
+    while (len && fgets(ptr, len, fp)) {
 	got = strlen(ptr);
 	if (got >= 1 && ptr[got - 1] == '\n') {
 	    tcpd_context.line++;
 	    if (got >= 2 && ptr[got - 2] == '\\') {
-		got -= 2;
+			got -= 2;
 	    } else {
-		return (start);
+			return (start);
 	    }
+		ptr += got;
+		len -= got;
+		ptr[0] = 0;
+	} else {
+		/* over buffer len */
+		last = (got >= 1) ? ptr[got - 1] : '\0';
+		while ((c = fgetc(fp)) != EOF) {
+			if (c == '\n') {
+				tcpd_context.line++;
+				if (last != '\\')
+					return (start);
+			}
+			last = c;
+		}
 	}
-	ptr += got;
-	len -= got;
-	ptr[0] = 0;
     }
     return (ptr > start ? start : 0);
 }