logo

oasis

Own branch of Oasis Linux (upstream: <https://git.sr.ht/~mcf/oasis/>) git clone https://anongit.hacktivis.me/git/oasis.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. disk-utils/fdisk-list.c | 10 +++-------
  7. libfdisk/src/label.c | 6 ++++--
  8. libfdisk/src/libfdisk.h.in | 2 +-
  9. 3 files changed, 8 insertions(+), 10 deletions(-)
  10. diff --git a/disk-utils/fdisk-list.c b/disk-utils/fdisk-list.c
  11. index 62aa2b3f5..dafab3ca4 100644
  12. --- a/disk-utils/fdisk-list.c
  13. +++ b/disk-utils/fdisk-list.c
  14. @@ -469,19 +469,15 @@ void list_available_columns(FILE *out)
  15. static int fieldname_to_id(const char *name, size_t namesz)
  16. {
  17. const struct fdisk_field *fl;
  18. - char buf[namesz + 1];
  19. assert(name);
  20. assert(namesz);
  21. assert(fields_label);
  22. - memcpy(buf, name, namesz);
  23. - buf[namesz] = '\0';
  24. -
  25. - fl = fdisk_label_get_field_by_name(fields_label, buf);
  26. + fl = fdisk_label_get_field_by_name(fields_label, name, namesz);
  27. if (!fl) {
  28. - warnx(_("%s unknown column: %s"),
  29. - fdisk_label_get_name(fields_label), buf);
  30. + warnx(_("%s unknown column: %.*s"),
  31. + fdisk_label_get_name(fields_label), (int)namesz, name);
  32. return -1;
  33. }
  34. return fdisk_field_get_id(fl);
  35. diff --git a/libfdisk/src/label.c b/libfdisk/src/label.c
  36. index 524a2bfb4..e0ec7da43 100644
  37. --- a/libfdisk/src/label.c
  38. +++ b/libfdisk/src/label.c
  39. @@ -223,12 +223,14 @@ const struct fdisk_field *fdisk_label_get_field(const struct fdisk_label *lb, in
  40. * fdisk_label_get_field_by_name
  41. * @lb: label
  42. * @name: field name
  43. + * @len: field name length
  44. *
  45. * Returns: pointer to static instance of the field.
  46. */
  47. const struct fdisk_field *fdisk_label_get_field_by_name(
  48. const struct fdisk_label *lb,
  49. - const char *name)
  50. + const char *name,
  51. + size_t len)
  52. {
  53. size_t i;
  54. @@ -236,7 +238,7 @@ const struct fdisk_field *fdisk_label_get_field_by_name(
  55. assert(name);
  56. for (i = 0; i < lb->nfields; i++) {
  57. - if (lb->fields[i].name && strcasecmp(lb->fields[i].name, name) == 0)
  58. + if (lb->fields[i].name && strncasecmp(lb->fields[i].name, name, len) == 0 && lb->fields[i].name[len] == '\0')
  59. return &lb->fields[i];
  60. }
  61. diff --git a/libfdisk/src/libfdisk.h.in b/libfdisk/src/libfdisk.h.in
  62. index 6f2e77d04..a0e7aa4b2 100644
  63. --- a/libfdisk/src/libfdisk.h.in
  64. +++ b/libfdisk/src/libfdisk.h.in
  65. @@ -466,7 +466,7 @@ extern int fdisk_label_get_fields_ids_all(
  66. extern const struct fdisk_field *fdisk_label_get_field(const struct fdisk_label *lb, int id);
  67. extern const struct fdisk_field *fdisk_label_get_field_by_name(
  68. const struct fdisk_label *lb,
  69. - const char *name);
  70. + const char *name, size_t len);
  71. extern void fdisk_label_set_changed(struct fdisk_label *lb, int changed);
  72. extern int fdisk_label_is_changed(const struct fdisk_label *lb);
  73. --
  74. 2.31.1