]> git.ipfire.org Git - thirdparty/util-linux.git/commitdiff
libfdisk: (script) fix device name separator parsing
authorKarel Zak <kzak@redhat.com>
Wed, 3 Sep 2025 08:54:06 +0000 (10:54 +0200)
committerKarel Zak <kzak@redhat.com>
Wed, 3 Sep 2025 08:54:06 +0000 (10:54 +0200)
In the named-fields script format, the colon is used as the separator
between the device name and other values. The device name may also
contain colons. This commit ensures it is treated as a separator only
when there is a space before or after the colon.

Note that the device name is optional and may be omitted. There is no
escaping for problematic characters in the name. Use " : " as the
separator.

Fixes: https://github.com/util-linux/util-linux/issues/3723
Signed-off-by: Karel Zak <kzak@redhat.com>
libfdisk/src/script.c

index e782f37c54f909b922a2fc990f6a0eac905bed5e..098a42f25dcc5b2cee0841b408a2ec3848103751 100644 (file)
@@ -1147,7 +1147,14 @@ static int parse_line_nameval(struct fdisk_script *dp, char *s)
        fdisk_partition_partno_follow_default(pa, 1);
 
        /* set partno */
-       p = strchr(s, ':');
+       p = strstr(s, " : ");                   /* device : start=  */
+       if (!p)
+               p = strstr(s, " :");            /* device :start=  */
+       if (!p)
+               p = strstr(s, ": ");            /* device: start=  */
+       if (!p)
+               p = strchr(s, ':');
+
        x = strchr(s, '=');
        if (p && (!x || p < x)) {
                *p = '\0';
@@ -1158,6 +1165,8 @@ static int parse_line_nameval(struct fdisk_script *dp, char *s)
                        fdisk_partition_partno_follow_default(pa, 0);
                        fdisk_partition_set_partno(pa, pno);
                }
+               if (*p == ':')
+                       p++;
        } else
                p = s;