From: Marc Schink Date: Fri, 2 Oct 2015 15:12:17 +0000 (+0200) Subject: helper/fileio: Fix memory leak. X-Git-Tag: v0.10.0-rc1~399 X-Git-Url: https://git.sur5r.net/?a=commitdiff_plain;h=627f1cb3542408533158dc5682b468ef48614eb8;p=openocd helper/fileio: Fix memory leak. 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 Reviewed-on: http://openocd.zylin.com/2998 Tested-by: jenkins Reviewed-by: Spencer Oliver --- diff --git a/src/helper/fileio.c b/src/helper/fileio.c index 9d393135..2664bfa1 100644 --- a/src/helper/fileio.c +++ b/src/helper/fileio.c @@ -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)