From: Karel Zak Date: Wed, 12 Aug 2020 13:52:53 +0000 (+0200) Subject: libfdisk: (script) make sure label is specified X-Git-Tag: v2.37-rc1~522 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=255f5f4c770ebd46a38b58975bd33e33ae87ed24;p=thirdparty%2Futil-linux.git libfdisk: (script) make sure label is specified and unref type if already specified (unlikely, but be paranoid) Signed-off-by: Karel Zak --- diff --git a/libfdisk/src/parttype.c b/libfdisk/src/parttype.c index e3eb0cffaf..ec5debca7a 100644 --- a/libfdisk/src/parttype.c +++ b/libfdisk/src/parttype.c @@ -438,7 +438,7 @@ struct fdisk_parttype *fdisk_label_advparse_parttype( struct fdisk_parttype *res = NULL; unsigned int code = 0; - if (!lb->nparttypes) + if (!lb || lb->nparttypes) return NULL; DBG(LABEL, ul_debugobj(lb, "parsing '%s' (%s) type", str, lb->name)); diff --git a/libfdisk/src/script.c b/libfdisk/src/script.c index 051fa326e9..d18ba57376 100644 --- a/libfdisk/src/script.c +++ b/libfdisk/src/script.c @@ -1075,7 +1075,7 @@ static int parse_line_nameval(struct fdisk_script *dp, char *s) } else if (!strncasecmp(p, "type=", 5) || !strncasecmp(p, "Id=", 3)) { /* backward compatibility */ - char *type; + char *type = NULL; p += ((*p == 'I' || *p == 'i') ? 3 : 5); /* "Id=", "type=" */ @@ -1083,14 +1083,12 @@ static int parse_line_nameval(struct fdisk_script *dp, char *s) if (rc) break; + fdisk_unref_parttype(pa->type); pa->type = fdisk_label_advparse_parttype(script_get_label(dp), type, FDISK_SCRIPT_PARTTYPE_PARSE_FLAGS); free(type); - - if (!pa->type) { + if (!pa->type) rc = -EINVAL; - break; - } } else { DBG(SCRIPT, ul_debugobj(dp, "script parse error: unknown field '%s'", p)); rc = -EINVAL; @@ -1201,10 +1199,10 @@ static int parse_line_valcommas(struct fdisk_script *dp, char *s) if (rc) break; + fdisk_unref_parttype(pa->type); pa->type = fdisk_label_advparse_parttype(script_get_label(dp), str, FDISK_SCRIPT_PARTTYPE_PARSE_FLAGS); free(str); - if (!pa->type) rc = -EINVAL; break;