[Midnightbsd-cvs] src: ldconfig.c: Don't leak memory #2

laffer1 at midnightbsd.org laffer1 at midnightbsd.org
Fri Apr 11 00:40:31 EDT 2008


Log Message:
-----------
Don't leak memory #2

Modified Files:
--------------
    src/sbin/ldconfig:
        ldconfig.c (r1.2 -> r1.3)

-------------- next part --------------
Index: ldconfig.c
===================================================================
RCS file: /home/cvs/src/sbin/ldconfig/ldconfig.c,v
retrieving revision 1.2
retrieving revision 1.3
diff -L sbin/ldconfig/ldconfig.c -L sbin/ldconfig/ldconfig.c -u -r1.2 -r1.3
--- sbin/ldconfig/ldconfig.c
+++ sbin/ldconfig/ldconfig.c
@@ -451,7 +451,7 @@
 			}
 			if (j == hdr.hh_nbucket) {
 				warnx("bummer!");
-				return -1;
+				goto out;
 			}
 			while (bp->hi_next != -1)
 				bp = &blist[bp->hi_next];
@@ -486,43 +486,48 @@
 	umask(0);	/* Create with exact permissions */
 	if ((fd = mkstemp(tmpfilename)) == -1) {
 		warn("%s", tmpfilename);
-		return -1;
+		goto out;
 	}
 	fchmod(fd, 0444);
 
 	if (write(fd, &hdr, sizeof(struct hints_header)) !=
 						sizeof(struct hints_header)) {
 		warn("%s", hints_file);
-		return -1;
+		goto out;
 	}
 	if (write(fd, blist, hdr.hh_nbucket * sizeof(*blist)) !=
 				(ssize_t)(hdr.hh_nbucket * sizeof(*blist))) {
 		warn("%s", hints_file);
-		return -1;
+		goto out;
 	}
 	if (write(fd, strtab, strtab_sz) != strtab_sz) {
 		warn("%s", hints_file);
-		return -1;
+		goto out;
 	}
 	if (close(fd) != 0) {
 		warn("%s", hints_file);
-		return -1;
+		goto out;
 	}
 
 	/* Install it */
 	if (unlink(hints_file) != 0 && errno != ENOENT) {
 		warn("%s", hints_file);
-		return -1;
+		goto out;
 	}
 
 	if (rename(tmpfilename, hints_file) != 0) {
 		warn("%s", hints_file);
-		return -1;
+		goto out;
 	}
 
 	free(blist);
 	free(strtab);
 	return 0;
+
+out:
+	free(blist);
+	free(strtab);
+	return -1;
 }
 
 static int


More information about the Midnightbsd-cvs mailing list