linux-qubasis
linux oasis port as a qubes template
git clone https://9o.is/git/linux-qubasis.git
0004-Remove-need-for-VLA-for-label-name.patch
(2778B)
1 From 1c563b2cc82ee2f7ec5daeba5747346250fcc2e2 Mon Sep 17 00:00:00 2001
2 From: Michael Forney <mforney@mforney.org>
3 Date: Tue, 18 Jun 2019 11:54:57 -0700
4 Subject: [PATCH] Remove need for VLA for label name
5
6 ---
7 disk-utils/fdisk-list.c | 10 +++-------
8 libfdisk/src/label.c | 6 ++++--
9 libfdisk/src/libfdisk.h.in | 2 +-
10 3 files changed, 8 insertions(+), 10 deletions(-)
11
12 diff --git a/disk-utils/fdisk-list.c b/disk-utils/fdisk-list.c
13 index 62aa2b3f5..dafab3ca4 100644
14 --- a/disk-utils/fdisk-list.c
15 +++ b/disk-utils/fdisk-list.c
16 @@ -469,19 +469,15 @@ void list_available_columns(FILE *out)
17 static int fieldname_to_id(const char *name, size_t namesz)
18 {
19 const struct fdisk_field *fl;
20 - char buf[namesz + 1];
21
22 assert(name);
23 assert(namesz);
24 assert(fields_label);
25
26 - memcpy(buf, name, namesz);
27 - buf[namesz] = '\0';
28 -
29 - fl = fdisk_label_get_field_by_name(fields_label, buf);
30 + fl = fdisk_label_get_field_by_name(fields_label, name, namesz);
31 if (!fl) {
32 - warnx(_("%s unknown column: %s"),
33 - fdisk_label_get_name(fields_label), buf);
34 + warnx(_("%s unknown column: %.*s"),
35 + fdisk_label_get_name(fields_label), (int)namesz, name);
36 return -1;
37 }
38 return fdisk_field_get_id(fl);
39 diff --git a/libfdisk/src/label.c b/libfdisk/src/label.c
40 index 524a2bfb4..e0ec7da43 100644
41 --- a/libfdisk/src/label.c
42 +++ b/libfdisk/src/label.c
43 @@ -223,12 +223,14 @@ const struct fdisk_field *fdisk_label_get_field(const struct fdisk_label *lb, in
44 * fdisk_label_get_field_by_name
45 * @lb: label
46 * @name: field name
47 + * @len: field name length
48 *
49 * Returns: pointer to static instance of the field.
50 */
51 const struct fdisk_field *fdisk_label_get_field_by_name(
52 const struct fdisk_label *lb,
53 - const char *name)
54 + const char *name,
55 + size_t len)
56 {
57 size_t i;
58
59 @@ -236,7 +238,7 @@ const struct fdisk_field *fdisk_label_get_field_by_name(
60 assert(name);
61
62 for (i = 0; i < lb->nfields; i++) {
63 - if (lb->fields[i].name && strcasecmp(lb->fields[i].name, name) == 0)
64 + if (lb->fields[i].name && strncasecmp(lb->fields[i].name, name, len) == 0 && lb->fields[i].name[len] == '\0')
65 return &lb->fields[i];
66 }
67
68 diff --git a/libfdisk/src/libfdisk.h.in b/libfdisk/src/libfdisk.h.in
69 index 6f2e77d04..a0e7aa4b2 100644
70 --- a/libfdisk/src/libfdisk.h.in
71 +++ b/libfdisk/src/libfdisk.h.in
72 @@ -466,7 +466,7 @@ extern int fdisk_label_get_fields_ids_all(
73 extern const struct fdisk_field *fdisk_label_get_field(const struct fdisk_label *lb, int id);
74 extern const struct fdisk_field *fdisk_label_get_field_by_name(
75 const struct fdisk_label *lb,
76 - const char *name);
77 + const char *name, size_t len);
78
79 extern void fdisk_label_set_changed(struct fdisk_label *lb, int changed);
80 extern int fdisk_label_is_changed(const struct fdisk_label *lb);
81 --
82 2.31.1
83