OSDN Git Service

Fix a pointer bug in setvbuf reported by Bart Visscher <magick@Linux-Fan.com>.
authorManuel Novoa III <mjn3@codepoet.org>
Sat, 16 Mar 2002 01:36:11 +0000 (01:36 -0000)
committerManuel Novoa III <mjn3@codepoet.org>
Sat, 16 Mar 2002 01:36:11 +0000 (01:36 -0000)
libc/stdio/stdio.c

index 5a2800a..49d2a74 100644 (file)
@@ -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. */
                }
        }