Module Name:    src
Committed By:   wiz
Date:           Tue Jan  4 23:42:48 UTC 2011

Modified Files:
        src/sbin/newfs_udf: newfs_udf.c

Log Message:
Fix memory leaks. Found by cppcheck.


To generate a diff of this commit:
cvs rdiff -u -r1.8 -r1.9 src/sbin/newfs_udf/newfs_udf.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sbin/newfs_udf/newfs_udf.c
diff -u src/sbin/newfs_udf/newfs_udf.c:1.8 src/sbin/newfs_udf/newfs_udf.c:1.9
--- src/sbin/newfs_udf/newfs_udf.c:1.8	Thu Sep 17 10:37:28 2009
+++ src/sbin/newfs_udf/newfs_udf.c	Tue Jan  4 23:42:48 2011
@@ -1,4 +1,4 @@
-/* $NetBSD: newfs_udf.c,v 1.8 2009/09/17 10:37:28 reinoud Exp $ */
+/* $NetBSD: newfs_udf.c,v 1.9 2011/01/04 23:42:48 wiz Exp $ */
 
 /*
  * Copyright (c) 2006, 2008 Reinoud Zandijk
@@ -848,8 +848,10 @@
 			/* block is bad */
 			printf("BAD block at %08d + %d         \n",
 				loc, layout.blockingnr);
-			if ((error = udf_register_bad_block(loc)))
+			if ((error = udf_register_bad_block(loc))) {
+				free(buffer);
 				return error;
+			}
 			num_errors ++;
 		}
 		loc += layout.blockingnr;
@@ -868,8 +870,10 @@
 			/* block is bad */
 			printf("BAD block at %08d + %d         \n",
 				loc, layout.blockingnr);
-			if ((error = udf_register_bad_block(loc)))
+			if ((error = udf_register_bad_block(loc))) {
+				free(buffer);
 				return error;
+			}
 			num_errors ++;
 		}
 		loc += layout.blockingnr;
@@ -904,8 +908,10 @@
 		/* wipe at least 6 times 2048 byte `sectors' */
 		for (cnt = 0; cnt < 6 *dpos; cnt++) {
 			pos = layout.iso9660_vrs + cnt;
-			if ((error = udf_write_sector(iso9660_vrs_desc, pos)))
+			if ((error = udf_write_sector(iso9660_vrs_desc, pos))) {
+				free(iso9660_vrs_desc);
 				return error;
+			}
 		}
 
 		/* common VRS fields in all written out ISO descriptors */
@@ -915,8 +921,10 @@
 
 		/* BEA01, NSR[23], TEA01 */
 		memcpy(iso9660_vrs_desc->identifier, "BEA01", 5);
-		if ((error = udf_write_sector(iso9660_vrs_desc, pos)))
+		if ((error = udf_write_sector(iso9660_vrs_desc, pos))) {
+			free(iso9660_vrs_desc);
 			return error;
+		}
 		pos += dpos;
 
 		if (context.dscrver == 2)
@@ -924,15 +932,20 @@
 		else
 			memcpy(iso9660_vrs_desc->identifier, "NSR03", 5);
 		;
-		if ((error = udf_write_sector(iso9660_vrs_desc, pos)))
+		if ((error = udf_write_sector(iso9660_vrs_desc, pos))) {
+			free(iso9660_vrs_desc);
 			return error;
+		}
 		pos += dpos;
 
 		memcpy(iso9660_vrs_desc->identifier, "TEA01", 5);
-		if ((error = udf_write_sector(iso9660_vrs_desc, pos)))
+		if ((error = udf_write_sector(iso9660_vrs_desc, pos))) {
+			free(iso9660_vrs_desc);
 			return error;
+		}
 	}
 
+	free(iso9660_vrs_desc);
 	/* return success */
 	return 0;
 }
@@ -1062,14 +1075,18 @@
 
 	loc = (format_flags & FORMAT_TRACK512) ? layout.vds1 : ti.track_start;
 	for (; loc < layout.part_start_lba; loc++) {
-		if ((error = udf_write_sector(zero_dscr, loc)))
+		if ((error = udf_write_sector(zero_dscr, loc))) {
+			free(zero_dscr);
 			return error;
+		}
 	}
+	free(zero_dscr);
 
 	/* Create anchors */
 	for (cnt = 0; cnt < 3; cnt++) {
-		if ((error = udf_create_anchor(cnt)))
+		if ((error = udf_create_anchor(cnt))) {
 			return error;
+		}
 	}
 
 	/* 

Reply via email to