Module Name: src Committed By: christos Date: Thu Dec 3 21:48:12 UTC 2015
Modified Files: src/sbin/gpt: label.c Log Message: CID 1341563: fix leak To generate a diff of this commit: cvs rdiff -u -r1.25 -r1.26 src/sbin/gpt/label.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/gpt/label.c diff -u src/sbin/gpt/label.c:1.25 src/sbin/gpt/label.c:1.26 --- src/sbin/gpt/label.c:1.25 Wed Dec 2 20:07:28 2015 +++ src/sbin/gpt/label.c Thu Dec 3 16:48:12 2015 @@ -33,7 +33,7 @@ __FBSDID("$FreeBSD: src/sbin/gpt/label.c,v 1.3 2006/10/04 18:20:25 marcel Exp $"); #endif #ifdef __RCSID -__RCSID("$NetBSD: label.c,v 1.25 2015/12/03 01:07:28 christos Exp $"); +__RCSID("$NetBSD: label.c,v 1.26 2015/12/03 21:48:12 christos Exp $"); #endif #include <sys/types.h> @@ -98,13 +98,12 @@ name_from_file(gpt_t gpt, void *v) if ((*name = malloc(maxlen)) == NULL) { gpt_warn(gpt, "Can't copy string"); - return -1; + goto cleanup; } len = fread(*name, 1, maxlen - 1, f); if (ferror(f)) { - free(*name); gpt_warn(gpt, "Can't label from `%s'", fn); - return -1; + goto cleanup; } if (f != stdin) fclose(f); @@ -114,6 +113,11 @@ name_from_file(gpt_t gpt, void *v) if (p != NULL) *p = '\0'; return 0; +cleanup: + free(*name); + if (f != stdin) + fclose(f); + return -1; } static int