From: vhanquez@kneesa.uk.xensource.com Date: Tue, 24 Jan 2006 10:55:45 +0000 (+0000) Subject: fixup memory leak and return value, if malloc or realloc fail. X-Git-Tag: archive/raspbian/4.8.0-1+rpi1~1^2~16541^2~5 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=caeab9b2e04d046e86a003c8ed387fe6d63be641;p=xen.git fixup memory leak and return value, if malloc or realloc fail. Signed-off-by: Vincent Hanquez --- diff --git a/tools/xenstore/utils.c b/tools/xenstore/utils.c index f8bf989c22..6655777bcd 100644 --- a/tools/xenstore/utils.c +++ b/tools/xenstore/utils.c @@ -96,21 +96,29 @@ void *grab_file(const char *filename, unsigned long *size) return NULL; buffer = malloc(max+1); + if (!buffer) + goto error; *size = 0; while ((ret = read(fd, buffer + *size, max - *size)) > 0) { *size += ret; if (*size == max) { + void *nbuffer; max *= 2; - buffer = realloc(buffer, max + 1); + nbuffer = realloc(buffer, max + 1); + if (!nbuffer) + goto error; + buffer = nbuffer; } } - if (ret < 0) { - free(buffer); - buffer = NULL; - } else - ((char *)buffer)[*size] = '\0'; + if (ret < 0) + goto error; + ((char *)buffer)[*size] = '\0'; close(fd); return buffer; +error: + free(buffer); + close(fd); + return NULL; } void release_file(void *data, unsigned long size __attribute__((unused)))