Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/sbin/newfs_udf Fix memory leaks. Found by cppcheck.



details:   https://anonhg.NetBSD.org/src/rev/15adcafedc51
branches:  trunk
changeset: 760435:15adcafedc51
user:      wiz <wiz%NetBSD.org@localhost>
date:      Tue Jan 04 23:42:48 2011 +0000

description:
Fix memory leaks. Found by cppcheck.

diffstat:

 sbin/newfs_udf/newfs_udf.c |  35 ++++++++++++++++++++++++++---------
 1 files changed, 26 insertions(+), 9 deletions(-)

diffs (101 lines):

diff -r 9100a5f33ba7 -r 15adcafedc51 sbin/newfs_udf/newfs_udf.c
--- a/sbin/newfs_udf/newfs_udf.c        Tue Jan 04 23:36:23 2011 +0000
+++ b/sbin/newfs_udf/newfs_udf.c        Tue Jan 04 23:42:48 2011 +0000
@@ -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;
+               }
        }
 
        /* 



Home | Main Index | Thread Index | Old Index