From 48c12e04cad347c03c7bfeb2a291ec6b21e96a1f Mon Sep 17 00:00:00 2001 From: Manuel Novoa III Date: Sat, 16 Mar 2002 01:36:11 +0000 Subject: Fix a pointer bug in setvbuf reported by Bart Visscher . --- libc/stdio/stdio.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) (limited to 'libc') diff --git a/libc/stdio/stdio.c b/libc/stdio/stdio.c index 5a2800a05..49d2a74c6 100644 --- a/libc/stdio/stdio.c +++ b/libc/stdio/stdio.c @@ -2408,9 +2408,13 @@ int setvbuf(register FILE * __restrict stream, register char * __restrict buf, allocated_buf_flag = 0; if ((!buf) && (size != (stream->bufend - stream->bufstart))) { /* No buffer supplied and requested size different from current. */ - allocated_buf_flag = __FLAG_FREEBUF; /* If size == 0, create a (hopefully) bogus non-null pointer... */ - if (!(buf = ((size > 0) ? malloc(size) : ((char *)NULL) + 1))) { + if (!(buf = ((size > 0) + ? ((allocated_buf_flag = __FLAG_FREEBUF), malloc(size)) + : ((char *)NULL) + 1)) + ) { + /* TODO -- should we really keep current buffer if it was passed + * to us earlier by the app? */ goto DONE; /* Keep current buffer. */ } } -- cgit v1.2.3