realloc doesn't free the original buffer when the reallocation failed. An abort
of read_file without free'ing the buffer would leak it.

Signed-off-by: Sven Eckelmann <[email protected]>

---
 vis/vis.c | 9 ++++++---
 1 file changed, 6 insertions(+), 3 deletions(-)

diff --git a/vis/vis.c b/vis/vis.c
index 7a8e780..b51fede 100644
--- a/vis/vis.c
+++ b/vis/vis.c
@@ -40,7 +40,7 @@
 static char *read_file(char *fname)
 {
        FILE *fp;
-       char *buf = NULL;
+       char *buf = NULL, *buf_tmp;
        size_t size, ret;
 
        fp = fopen(fname, "r");
@@ -51,10 +51,13 @@ static char *read_file(char *fname)
        size = 0;
        while (!feof(fp)) {
 
-               buf = realloc(buf, size + 4097);
-               if (!buf)
+               buf_tmp = realloc(buf, size + 4097);
+               if (!buf_tmp) {
+                       free(buf);
                        return NULL;
+               }
 
+               buf = buf_tmp;
                ret = fread(buf + size, 1, 4096, fp);
                size += ret;
        }
-- 
2.0.0.rc2

Reply via email to