summaryrefslogtreecommitdiff
path: root/lib/getndelim2.c
diff options
context:
space:
mode:
authorPaul Eggert <eggert@cs.ucla.edu>2003-10-22 05:53:05 +0000
committerPaul Eggert <eggert@cs.ucla.edu>2003-10-22 05:53:05 +0000
commit1af434e77bc9dcb94baaf1f6d9b26fdd9aa1770c (patch)
tree81f0e2ccb374274857322f9d9f9a37e18a645498 /lib/getndelim2.c
parent19e15828f69a5f47061de5e631fbe3fdbc666849 (diff)
downloadgnulib-1af434e77bc9dcb94baaf1f6d9b26fdd9aa1770c.tar.gz
(getndelim2): When size calculation overflows,
ceiling the allocation at NMAX bytes.
Diffstat (limited to 'lib/getndelim2.c')
-rw-r--r--lib/getndelim2.c17
1 files changed, 7 insertions, 10 deletions
diff --git a/lib/getndelim2.c b/lib/getndelim2.c
index 6f08689995..3959462593 100644
--- a/lib/getndelim2.c
+++ b/lib/getndelim2.c
@@ -81,18 +81,15 @@ getndelim2 (char **lineptr, size_t *linesize, size_t nmax,
size_t newlinesize =
(*linesize > MIN_CHUNK ? 2 * *linesize : *linesize + MIN_CHUNK);
- if (newlinesize > nmax)
+ if (! (*linesize < newlinesize && newlinesize <= nmax))
newlinesize = nmax;
- if (newlinesize > *linesize)
- {
- *linesize = newlinesize;
- nbytes_avail = *linesize + *lineptr - read_pos;
- *lineptr = realloc (*lineptr, *linesize);
- if (!*lineptr)
- return -1;
- read_pos = *linesize - nbytes_avail + *lineptr;
- }
+ *linesize = newlinesize;
+ nbytes_avail = *linesize + *lineptr - read_pos;
+ *lineptr = realloc (*lineptr, *linesize);
+ if (!*lineptr)
+ return -1;
+ read_pos = *linesize - nbytes_avail + *lineptr;
}
c = getc (stream);