From cdcf361fda31ec8b3e93e89d5aa26ee5b68f8867 Mon Sep 17 00:00:00 2001 From: Paul Pluzhnikov Date: Tue, 5 Mar 2013 13:44:33 -0800 Subject: * stdio-common/vfprintf.c (vfprintf): Check malloc return; don't call free(NULL). --- stdio-common/vfprintf.c | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) (limited to 'stdio-common/vfprintf.c') diff --git a/stdio-common/vfprintf.c b/stdio-common/vfprintf.c index 89126d2d0a..7042090268 100644 --- a/stdio-common/vfprintf.c +++ b/stdio-common/vfprintf.c @@ -1691,7 +1691,8 @@ do_positional: /* Just a counter. */ size_t cnt; - free (workstart); + if (__builtin_expect (workstart != NULL, 0)) + free (workstart); workstart = NULL; if (grouping == (const char *) -1) @@ -1944,6 +1945,11 @@ do_positional: { workstart = (CHAR_T *) malloc ((MAX (prec, width) + 32) * sizeof (CHAR_T)); + if (workstart == NULL) + { + done = -1; + goto all_done; + } workend = workstart + (MAX (prec, width) + 32); } } @@ -2021,7 +2027,8 @@ do_positional: break; } - free (workstart); + if (__builtin_expect (workstart != NULL, 0)) + free (workstart); workstart = NULL; /* Write the following constant string. */ @@ -2032,8 +2039,10 @@ do_positional: } all_done: - free (args_malloced); - free (workstart); + if (__builtin_expect (args_malloced != NULL, 0)) + free (args_malloced); + if (__builtin_expect (workstart != NULL, 0)) + free (workstart); /* Unlock the stream. */ _IO_funlockfile (s); _IO_cleanup_region_end (0); -- cgit 1.4.1