0004-Remove-need-for-VLA-for-label-name.patch (2778B)
- From 1c563b2cc82ee2f7ec5daeba5747346250fcc2e2 Mon Sep 17 00:00:00 2001
- From: Michael Forney <mforney@mforney.org>
- Date: Tue, 18 Jun 2019 11:54:57 -0700
- Subject: [PATCH] Remove need for VLA for label name
- ---
- disk-utils/fdisk-list.c | 10 +++-------
- libfdisk/src/label.c | 6 ++++--
- libfdisk/src/libfdisk.h.in | 2 +-
- 3 files changed, 8 insertions(+), 10 deletions(-)
- diff --git a/disk-utils/fdisk-list.c b/disk-utils/fdisk-list.c
- index 62aa2b3f5..dafab3ca4 100644
- --- a/disk-utils/fdisk-list.c
- +++ b/disk-utils/fdisk-list.c
- @@ -469,19 +469,15 @@ void list_available_columns(FILE *out)
- static int fieldname_to_id(const char *name, size_t namesz)
- {
- const struct fdisk_field *fl;
- - char buf[namesz + 1];
- assert(name);
- assert(namesz);
- assert(fields_label);
- - memcpy(buf, name, namesz);
- - buf[namesz] = '\0';
- -
- - fl = fdisk_label_get_field_by_name(fields_label, buf);
- + fl = fdisk_label_get_field_by_name(fields_label, name, namesz);
- if (!fl) {
- - warnx(_("%s unknown column: %s"),
- - fdisk_label_get_name(fields_label), buf);
- + warnx(_("%s unknown column: %.*s"),
- + fdisk_label_get_name(fields_label), (int)namesz, name);
- return -1;
- }
- return fdisk_field_get_id(fl);
- diff --git a/libfdisk/src/label.c b/libfdisk/src/label.c
- index 524a2bfb4..e0ec7da43 100644
- --- a/libfdisk/src/label.c
- +++ b/libfdisk/src/label.c
- @@ -223,12 +223,14 @@ const struct fdisk_field *fdisk_label_get_field(const struct fdisk_label *lb, in
- * fdisk_label_get_field_by_name
- * @lb: label
- * @name: field name
- + * @len: field name length
- *
- * Returns: pointer to static instance of the field.
- */
- const struct fdisk_field *fdisk_label_get_field_by_name(
- const struct fdisk_label *lb,
- - const char *name)
- + const char *name,
- + size_t len)
- {
- size_t i;
- @@ -236,7 +238,7 @@ const struct fdisk_field *fdisk_label_get_field_by_name(
- assert(name);
- for (i = 0; i < lb->nfields; i++) {
- - if (lb->fields[i].name && strcasecmp(lb->fields[i].name, name) == 0)
- + if (lb->fields[i].name && strncasecmp(lb->fields[i].name, name, len) == 0 && lb->fields[i].name[len] == '\0')
- return &lb->fields[i];
- }
- diff --git a/libfdisk/src/libfdisk.h.in b/libfdisk/src/libfdisk.h.in
- index 6f2e77d04..a0e7aa4b2 100644
- --- a/libfdisk/src/libfdisk.h.in
- +++ b/libfdisk/src/libfdisk.h.in
- @@ -466,7 +466,7 @@ extern int fdisk_label_get_fields_ids_all(
- extern const struct fdisk_field *fdisk_label_get_field(const struct fdisk_label *lb, int id);
- extern const struct fdisk_field *fdisk_label_get_field_by_name(
- const struct fdisk_label *lb,
- - const char *name);
- + const char *name, size_t len);
- extern void fdisk_label_set_changed(struct fdisk_label *lb, int changed);
- extern int fdisk_label_is_changed(const struct fdisk_label *lb);
- --
- 2.31.1