Blame SOURCES/0008-fwup_resource_iter_create-make-the-error-path-actual.patch

453bef
From f350c8f7f91a17039cabd7b1650609e154a85ccd Mon Sep 17 00:00:00 2001
453bef
From: Peter Jones <pjones@redhat.com>
453bef
Date: Tue, 28 Mar 2017 13:32:17 -0400
453bef
Subject: [PATCH 08/11] fwup_resource_iter_create(): make the error path
453bef
 actually work...
453bef
453bef
coverity noticed that this was horrible.
453bef
453bef
Signed-off-by: Peter Jones <pjones@redhat.com>
453bef
---
453bef
 linux/libfwup.c | 23 ++++++++++++++++-------
453bef
 1 file changed, 16 insertions(+), 7 deletions(-)
453bef
453bef
diff --git a/linux/libfwup.c b/linux/libfwup.c
453bef
index 28a4417..3bf2659 100644
453bef
--- a/linux/libfwup.c
453bef
+++ b/linux/libfwup.c
453bef
@@ -422,7 +422,8 @@ int
453bef
 fwup_resource_iter_create(fwup_resource_iter **iter)
453bef
 {
453bef
 	int error;
453bef
-	const char *path;
453bef
+	char *path;
453bef
+
453bef
 	if (!iter) {
453bef
 		efi_error("invalid iter");
453bef
 		errno = EINVAL;
453bef
@@ -438,16 +439,13 @@ fwup_resource_iter_create(fwup_resource_iter **iter)
453bef
 	path = get_esrt_dir(1);
453bef
 	if (!path) {
453bef
 		efi_error("get_esrt_dir(1) failed");
453bef
-		return -1;
453bef
+		goto err;
453bef
 	}
453bef
+
453bef
 	new->dir = opendir(path);
453bef
 	if (!new->dir) {
453bef
 		efi_error("opendir(path) failed");
453bef
-err:
453bef
-		error = errno;
453bef
-		free(new);
453bef
-		errno = error;
453bef
-		return -1;
453bef
+		goto err;
453bef
 	}
453bef
 
453bef
 	new->dirfd = dirfd(new->dir);
453bef
@@ -458,6 +456,17 @@ err:
453bef
 
453bef
 	*iter = new;
453bef
 	return 0;
453bef
+err:
453bef
+	error = errno;
453bef
+	if (new) {
453bef
+		if (new->dir)
453bef
+			closedir(new->dir);
453bef
+		free(new);
453bef
+	}
453bef
+	if (path)
453bef
+		free(path);
453bef
+	errno = error;
453bef
+	return -1;
453bef
 }
453bef
 
453bef
 static void
453bef
-- 
453bef
2.12.2
453bef