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