Module Name: src Committed By: reinoud Date: Tue Aug 6 08:18:08 UTC 2013
Modified Files: src/sbin/newfs_udf: udf_write.c src/usr.sbin/makefs: udf.c Log Message: Fix memory leaks found by Coverity and fix memoryleaks in the new code To generate a diff of this commit: cvs rdiff -u -r1.6 -r1.7 src/sbin/newfs_udf/udf_write.c cvs rdiff -u -r1.4 -r1.5 src/usr.sbin/makefs/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/udf_write.c diff -u src/sbin/newfs_udf/udf_write.c:1.6 src/sbin/newfs_udf/udf_write.c:1.7 --- src/sbin/newfs_udf/udf_write.c:1.6 Mon Aug 5 20:52:08 2013 +++ src/sbin/newfs_udf/udf_write.c Tue Aug 6 08:18:08 2013 @@ -1,4 +1,4 @@ -/* $NetBSD: udf_write.c,v 1.6 2013/08/05 20:52:08 reinoud Exp $ */ +/* $NetBSD: udf_write.c,v 1.7 2013/08/06 08:18:08 reinoud Exp $ */ /* * Copyright (c) 2006, 2008, 2013 Reinoud Zandijk @@ -30,7 +30,7 @@ #endif #include <sys/cdefs.h> -__RCSID("$NetBSD: udf_write.c,v 1.6 2013/08/05 20:52:08 reinoud Exp $"); +__RCSID("$NetBSD: udf_write.c,v 1.7 2013/08/06 08:18:08 reinoud Exp $"); #include <stdio.h> #include <stdlib.h> @@ -783,6 +783,8 @@ udf_do_rootdir(void) { error = udf_write_dscr_virt(root_dscr, layout.rootdir, context.metadata_part, 1); + free(root_dscr); + return error; } @@ -891,6 +893,7 @@ udf_do_newfs_postfix(void) loc++; error = udf_write_dscr_virt(vat_dscr, loc, metadata_part, 1); + free(vat_dscr); if (error) return error; } Index: src/usr.sbin/makefs/udf.c diff -u src/usr.sbin/makefs/udf.c:1.4 src/usr.sbin/makefs/udf.c:1.5 --- src/usr.sbin/makefs/udf.c:1.4 Mon Aug 5 18:44:16 2013 +++ src/usr.sbin/makefs/udf.c Tue Aug 6 08:18:08 2013 @@ -1,4 +1,4 @@ -/* $NetBSD: udf.c,v 1.4 2013/08/05 18:44:16 reinoud Exp $ */ +/* $NetBSD: udf.c,v 1.5 2013/08/06 08:18:08 reinoud Exp $ */ /* * Copyright (c) 2006, 2008, 2013 Reinoud Zandijk @@ -30,7 +30,7 @@ #endif #include <sys/cdefs.h> -__RCSID("$NetBSD: udf.c,v 1.4 2013/08/05 18:44:16 reinoud Exp $"); +__RCSID("$NetBSD: udf.c,v 1.5 2013/08/06 08:18:08 reinoud Exp $"); #include <stdio.h> #include <stdlib.h> @@ -880,6 +880,7 @@ udf_copy_file(struct stat *st, char *pat uint8_t *data; int nblk; int i, f; + int error; fnode = cur->inode; @@ -901,13 +902,13 @@ udf_copy_file(struct stat *st, char *pat printf(" "); i = 0; + error = 0; while (chunk) { rd = read(f, data, chunk); if (rd != chunk) { warn("Short read of file %s\n", cur->name); - close(f); - free(data); - return errno; + error = errno; + break; } printf("\b%c", "\\|/-"[i++ % 4]); fflush(stdout);fflush(stderr); @@ -927,12 +928,13 @@ udf_copy_file(struct stat *st, char *pat udf_set_link_cnt(dscr, fnode->nlink); udf_write_dscr_virt(dscr, udf_rw32(icb->loc.lb_num), udf_rw16(icb->loc.part_num), 1); + free(dscr); /* remember our location for hardlinks */ cur->inode->fsuse = malloc(sizeof(struct long_ad)); memcpy(cur->inode->fsuse, icb, sizeof(struct long_ad)); - return 0; + return error; } @@ -1069,6 +1071,7 @@ udf_populate_walk(fsinfo_t *fsopts, fsno udf_write_dscr_virt(dscr, udf_rw32(icb.loc.lb_num), udf_rw16(icb.loc.part_num), 1); + free(dscr); free(softlink_buf); udf_create_fid(ddoff, fid, cur->name, 0, &icb); @@ -1088,6 +1091,8 @@ udf_populate_walk(fsinfo_t *fsopts, fsno udf_write_dscr_virt(dir_dscr, udf_rw32(dir_icb->loc.lb_num), udf_rw16(dir_icb->loc.part_num), 1); + free(dirdata); + free(dir_dscr); return retval; } @@ -1122,10 +1127,11 @@ udf_enumerate_and_estimate(const char *d /* calculate strict minimal size */ udf_estimate_walk(fsopts, root, path, stats); - printf("ndirs\t\t%d\n", stats->ndirs); - printf("nfiles\t\t%d\n", stats->nfiles); - printf("ndata_blocks\t%d\n", stats->ndatablocks); - printf("nmetadata_blocks\t%d\n", stats->nmetadatablocks); + printf("ndirs %d\n", stats->ndirs); + printf("nfiles %d\n", stats->nfiles); + printf("ndata_blocks %d\n", stats->ndatablocks); + printf("nmetadata_blocks %d\n", stats->nmetadatablocks); + printf("\n"); /* adjust for options : free file nodes */ if (fsopts->freefiles) {