summaryrefslogtreecommitdiff
path: root/ares/ares__read_line.c
diff options
context:
space:
mode:
Diffstat (limited to 'ares/ares__read_line.c')
-rw-r--r--ares/ares__read_line.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/ares/ares__read_line.c b/ares/ares__read_line.c
index 29f8e5dc0..2e94945dc 100644
--- a/ares/ares__read_line.c
+++ b/ares/ares__read_line.c
@@ -20,6 +20,7 @@
#include <stdlib.h>
#include <string.h>
#include "ares.h"
+#include "ares_nowarn.h"
#include "ares_private.h"
/* This is an internal function. Its contract is to read a line from
@@ -46,7 +47,9 @@ int ares__read_line(FILE *fp, char **buf, size_t *bufsize)
for (;;)
{
- if (!fgets(*buf + offset, (int)(*bufsize - offset), fp))
+ int bytestoread = aresx_uztosi(*bufsize - offset);
+
+ if (!fgets(*buf + offset, bytestoread, fp))
return (offset != 0) ? 0 : (ferror(fp)) ? ARES_EFILE : ARES_EOF;
len = offset + strlen(*buf + offset);
if ((*buf)[len - 1] == '\n')
@@ -55,6 +58,8 @@ int ares__read_line(FILE *fp, char **buf, size_t *bufsize)
break;
}
offset = len;
+ if(len < *bufsize - 1)
+ continue;
/* Allocate more space. */
newbuf = realloc(*buf, *bufsize * 2);