]> git.sur5r.net Git - openocd/commitdiff
helper/fileio: Fix memory leak.
authorMarc Schink <openocd-dev@marcschink.de>
Fri, 2 Oct 2015 15:12:17 +0000 (17:12 +0200)
committerFreddie Chopin <freddie.chopin@gmail.com>
Tue, 3 Nov 2015 22:15:31 +0000 (22:15 +0000)
The memory leak occurs when opening a file fails. It can be
reproduced by using the "flash verify_bank" command with a filename
that does not exist.

Change-Id: I60b7b545c18793d750ff75d08124fde3f0aa6f64
Signed-off-by: Marc Schink <openocd-dev@marcschink.de>
Reviewed-on: http://openocd.zylin.com/2998
Tested-by: jenkins
Reviewed-by: Spencer Oliver <spen@spen-soft.co.uk>
src/helper/fileio.c

index 9d3931356e706120aa67f57febcd5ccda1f2d41c..2664bfa1160dd5be688384f382537a07af35f0b9 100644 (file)
@@ -109,10 +109,10 @@ int fileio_open(struct fileio *fileio_p,
        enum fileio_access access_type,
        enum fileio_type type)
 {
-       int retval = ERROR_OK;
+       int retval;
+       struct fileio_internal *fileio;
 
-       struct fileio_internal *fileio = malloc(sizeof(struct fileio_internal));
-       fileio_p->fp = fileio;
+       fileio = malloc(sizeof(struct fileio_internal));
 
        fileio->type = type;
        fileio->access = access_type;
@@ -120,7 +120,15 @@ int fileio_open(struct fileio *fileio_p,
 
        retval = fileio_open_local(fileio);
 
-       return retval;
+       if (retval != ERROR_OK) {
+               free(fileio->url);
+               free(fileio);
+               return retval;
+       }
+
+       fileio_p->fp = fileio;
+
+       return ERROR_OK;
 }
 
 static inline int fileio_close_local(struct fileio_internal *fileio)