You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
50 lines
1.0 KiB
50 lines
1.0 KiB
3 years ago
|
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);
|
||
|
}
|