From 89f43bf771edf352479f26395b56594201f0d958 Mon Sep 17 00:00:00 2001 From: Jeremy Kerr Date: Thu, 14 Nov 2013 16:18:59 +1100 Subject: [PATCH] lib/system: Don't leak in pb_mkdir_recursive If the mkdir fails, we'll exit without freeing str. Signed-off-by: Jeremy Kerr --- lib/system/system.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/lib/system/system.c b/lib/system/system.c index 0253ac8..917d444 100644 --- a/lib/system/system.c +++ b/lib/system/system.c @@ -39,8 +39,8 @@ enum tftp_type tftp_type = TFTP_TYPE; int pb_mkdir_recursive(const char *dir) { struct stat statbuf; + int rc, mode = 0755; char *str, *sep; - int mode = 0755; if (!*dir) return 0; @@ -57,6 +57,8 @@ int pb_mkdir_recursive(const char *dir) str = talloc_strdup(NULL, dir); sep = strchr(*str == '/' ? str + 1 : str, '/'); + rc = 0; + while (1) { /* terminate the path at sep */ @@ -65,7 +67,8 @@ int pb_mkdir_recursive(const char *dir) if (mkdir(str, mode) && errno != EEXIST) { pb_log("mkdir(%s): %s\n", str, strerror(errno)); - return -1; + rc = -1; + break; } if (!sep) @@ -78,7 +81,7 @@ int pb_mkdir_recursive(const char *dir) talloc_free(str); - return 0; + return rc; } int pb_rmdir_recursive(const char *base, const char *dir) -- 2.39.2