From 1c563b2cc82ee2f7ec5daeba5747346250fcc2e2 Mon Sep 17 00:00:00 2001 From: Michael Forney 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