Blame SOURCES/0017-libparted-Fix-possible-memory-leaks.patch

0cb0b9
From c01a30a6821b243cb0f497b73bb5a7b7465b6aca Mon Sep 17 00:00:00 2001
0cb0b9
From: Amarnath Valluri <amarnath.valluri@intel.com>
0cb0b9
Date: Tue, 4 Aug 2015 13:04:45 +0300
0cb0b9
Subject: [PATCH 17/18] libparted: Fix possible memory leaks
0cb0b9
0cb0b9
* libparted/fs/r/fat/resize.c(fat_convert_directory): Possible leak
0cb0b9
  of sub_old_dir_trav or sub_new_dir_trav in error case.
0cb0b9
* libparted/fs/r/fat/resize.c(fat_construct_converted_tree ): Possible
0cb0b9
  leak of new_trav_info or old_trav_info in error case.
0cb0b9
0cb0b9
Signed-off-by: Amarnath Valluri <amarnath.valluri@intel.com>
0cb0b9
Signed-off-by: Brian C. Lane <bcl@redhat.com>
0cb0b9
(cherry picked from commit 4886bad13dd011ff56e1c46ff29e8067778c16fd)
0cb0b9
---
0cb0b9
 libparted/fs/r/fat/resize.c | 11 +++++++++--
0cb0b9
 1 file changed, 9 insertions(+), 2 deletions(-)
0cb0b9
0cb0b9
diff --git a/libparted/fs/r/fat/resize.c b/libparted/fs/r/fat/resize.c
0cb0b9
index 919acf0..b512576 100644
0cb0b9
--- a/libparted/fs/r/fat/resize.c
0cb0b9
+++ b/libparted/fs/r/fat/resize.c
0cb0b9
@@ -177,10 +177,13 @@ fat_convert_directory (FatOpContext* ctx, FatTraverseInfo* old_trav,
0cb0b9
 				&& old_dir_entry->name [0] != '.') {
0cb0b9
 			sub_old_dir_trav
0cb0b9
 			    = fat_traverse_directory (old_trav, old_dir_entry);
0cb0b9
+			if (!sub_old_dir_trav) return 0;
0cb0b9
 			sub_new_dir_trav
0cb0b9
 			    = fat_traverse_directory (new_trav, new_dir_entry);
0cb0b9
-			if (!sub_old_dir_trav || !sub_new_dir_trav)
0cb0b9
+			if (!sub_new_dir_trav) {
0cb0b9
+				fat_traverse_complete (sub_old_dir_trav);
0cb0b9
 				return 0;
0cb0b9
+			}
0cb0b9
 
0cb0b9
 			if (!fat_convert_directory (ctx, sub_old_dir_trav,
0cb0b9
 						    sub_new_dir_trav))
0cb0b9
@@ -315,17 +318,21 @@ fat_construct_converted_tree (FatOpContext* ctx)
0cb0b9
 	if (new_fs_info->fat_type == FAT_TYPE_FAT32) {
0cb0b9
 		new_trav_info = fat_traverse_begin (ctx->new_fs,
0cb0b9
 					    new_fs_info->root_cluster, "\\");
0cb0b9
+		if (!new_trav_info) return 0;
0cb0b9
 		old_trav_info = fat_traverse_begin (ctx->old_fs, FAT_ROOT,
0cb0b9
 						    "\\");
0cb0b9
 	} else {
0cb0b9
 		fat_clear_root_dir (ctx->new_fs);
0cb0b9
 		new_trav_info = fat_traverse_begin (ctx->new_fs, FAT_ROOT,
0cb0b9
 						    "\\");
0cb0b9
+		if (!new_trav_info) return 0;
0cb0b9
 		old_trav_info = fat_traverse_begin (ctx->old_fs,
0cb0b9
 					    old_fs_info->root_cluster, "\\");
0cb0b9
 	}
0cb0b9
-	if (!new_trav_info || !old_trav_info)
0cb0b9
+	if (!old_trav_info) {
0cb0b9
+		fat_traverse_complete (new_trav_info);
0cb0b9
 		return 0;
0cb0b9
+	}
0cb0b9
 	if (!fat_convert_directory (ctx, old_trav_info, new_trav_info))
0cb0b9
 		return 0;
0cb0b9
 	return 1;
0cb0b9
-- 
0cb0b9
2.4.3
0cb0b9