From 1af434e77bc9dcb94baaf1f6d9b26fdd9aa1770c Mon Sep 17 00:00:00 2001 From: Paul Eggert Date: Wed, 22 Oct 2003 05:53:05 +0000 Subject: [PATCH] (getndelim2): When size calculation overflows, ceiling the allocation at NMAX bytes. --- lib/ChangeLog | 5 +++++ lib/getndelim2.c | 17 +++++++---------- 2 files changed, 12 insertions(+), 10 deletions(-) diff --git a/lib/ChangeLog b/lib/ChangeLog index ecc0c9693c..00531bec0e 100644 --- a/lib/ChangeLog +++ b/lib/ChangeLog @@ -1,5 +1,10 @@ 2003-10-21 Paul Eggert + * getndelim2.c (getndelim2): When size calculation overflows, + ceiling the allocation at NMAX bytes rather than silently + discarding input bytes before NMAX is reached. This makes + a difference only if NMAX exceeds SIZE_MAX / 2. + * obstack.c: Merge from glibc. [defined _LIBC]: Include , not "obstack.h". Add libc_hidden_def (_obstack_newchunk). 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); -- 2.30.2