From 76caf64325496d777227edd99c62b6073fc46240 Mon Sep 17 00:00:00 2001 From: Mark Andrews Date: Tue, 11 Jun 2013 16:03:22 +1000 Subject: [PATCH] handle realloc failure [RT #32105] (cherry picked from commit 0a6bfbc939dff0ad039e8ff53dd6a4b14565b459) --- lib/tests/t_api.c | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/lib/tests/t_api.c b/lib/tests/t_api.c index 4011375189..2640631529 100644 --- a/lib/tests/t_api.c +++ b/lib/tests/t_api.c @@ -514,12 +514,12 @@ t_fgetbs(FILE *fp) { int c; size_t n; size_t size; - char *buf; + char *buf, *old; char *p; - n = 0; - size = T_BUFSIZ; - buf = (char *) malloc(T_BUFSIZ * sizeof(char)); + n = 0; + size = T_BUFSIZ; + old = buf = (char *) malloc(T_BUFSIZ * sizeof(char)); if (buf != NULL) { p = buf; @@ -535,7 +535,8 @@ t_fgetbs(FILE *fp) { buf = (char *)realloc(buf, size * sizeof(char)); if (buf == NULL) - break; + goto err; + old = buf; p = buf + n; } } @@ -546,7 +547,10 @@ t_fgetbs(FILE *fp) { } return (buf); } else { - fprintf(stderr, "malloc failed %d", errno); + err: + if (old != NULL) + free(old); + fprintf(stderr, "malloc/realloc failed %d", errno); return(NULL); } }