From: Karel Zak Date: Thu, 13 Aug 2020 11:48:28 +0000 (+0200) Subject: libfdisk: (script) fix possible memory leaks X-Git-Tag: v2.36.1~64 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=975c8d0df5cb1c66298c42ec6071cfe433d5d8bc;p=thirdparty%2Futil-linux.git libfdisk: (script) fix possible memory leaks Signed-off-by: Karel Zak --- diff --git a/libfdisk/src/script.c b/libfdisk/src/script.c index 8eb62dcbfe..ea16f13926 100644 --- a/libfdisk/src/script.c +++ b/libfdisk/src/script.c @@ -636,6 +636,7 @@ static int write_file_json(struct fdisk_script *dp, FILE *f) fputs("\"node\":", f); fputs_quoted_json(p, f); nvars++; + free(p); } if (fdisk_partition_has_start(pa)) { @@ -737,6 +738,7 @@ static int write_file_sfdisk(struct fdisk_script *dp, FILE *f) if (p) { DBG(SCRIPT, ul_debugobj(dp, "write %s entry", p)); fprintf(f, "%s :", p); + free(p); } else fprintf(f, "%zu :", pa->partno + 1); @@ -1068,14 +1070,17 @@ static int parse_line_nameval(struct fdisk_script *dp, char *s) } else if (!strncasecmp(p, "attrs=", 6)) { p += 6; + free(pa->attrs); rc = next_string(&p, &pa->attrs); } else if (!strncasecmp(p, "uuid=", 5)) { p += 5; + free(pa->uuid); rc = next_string(&p, &pa->uuid); } else if (!strncasecmp(p, "name=", 5)) { p += 5; + free(pa->name); rc = next_string(&p, &pa->name); if (!rc) unhexmangle_string(pa->name); @@ -1124,7 +1129,7 @@ static int parse_line_nameval(struct fdisk_script *dp, char *s) static int parse_line_valcommas(struct fdisk_script *dp, char *s) { int rc = 0; - char *p = s, *str; + char *p = s; struct fdisk_partition *pa; enum { ITEM_START, ITEM_SIZE, ITEM_TYPE, ITEM_BOOTABLE }; int item = -1; @@ -1209,6 +1214,9 @@ static int parse_line_valcommas(struct fdisk_script *dp, char *s) } break; case ITEM_TYPE: + { + char *str = NULL; + if (*p == ',' || *p == ';' || alone_sign(sign, p)) break; /* use default type */ @@ -1223,6 +1231,7 @@ static int parse_line_valcommas(struct fdisk_script *dp, char *s) if (!pa->type) rc = -EINVAL; break; + } case ITEM_BOOTABLE: if (*p == ',' || *p == ';') break;