2003-10-21 Paul Eggert <eggert@twinsun.com>
+ * 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 <obstack.h>, not "obstack.h".
Add libc_hidden_def (_obstack_newchunk).
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);