93 lines
3.1 KiB
Diff
93 lines
3.1 KiB
Diff
From: Karel Zak <kzak@redhat.com>
|
|
Date: Tue, 1 Apr 2025 17:45:01 +0200
|
|
Subject: lsblk: avoid strcasecmp() for ASCII-only strings
|
|
|
|
Use cctype.h for locale-independent string comparison and to avoid
|
|
tricky string conversions like in tr_TR locales.
|
|
|
|
Fixes: https://github.com/util-linux/util-linux/issues/3490
|
|
Signed-off-by: Karel Zak <kzak@redhat.com>
|
|
(cherry picked from commit b5ae9e8d0234738f381c56aa797aeba81a05d587)
|
|
---
|
|
misc-utils/lsblk-properties.c | 11 ++++++-----
|
|
misc-utils/lsblk.c | 7 ++++---
|
|
2 files changed, 10 insertions(+), 8 deletions(-)
|
|
|
|
diff --git a/misc-utils/lsblk-properties.c b/misc-utils/lsblk-properties.c
|
|
index 66a6df6..21e764b 100644
|
|
--- a/misc-utils/lsblk-properties.c
|
|
+++ b/misc-utils/lsblk-properties.c
|
|
@@ -6,6 +6,7 @@
|
|
#endif
|
|
|
|
#include "c.h"
|
|
+#include "cctype.h"
|
|
#include "xalloc.h"
|
|
#include "mangle.h"
|
|
#include "path.h"
|
|
@@ -352,13 +353,13 @@ done:
|
|
|
|
static int name2method(const char *name, size_t namesz)
|
|
{
|
|
- if (namesz == 4 && strncasecmp(name, "none", namesz) == 0)
|
|
+ if (namesz == 4 && c_strncasecmp(name, "none", namesz) == 0)
|
|
return LSBLK_METHOD_NONE;
|
|
- if (namesz == 4 && strncasecmp(name, "udev", namesz) == 0)
|
|
+ if (namesz == 4 && c_strncasecmp(name, "udev", namesz) == 0)
|
|
return LSBLK_METHOD_UDEV;
|
|
- if (namesz == 5 && strncasecmp(name, "blkid", namesz) == 0)
|
|
+ if (namesz == 5 && c_strncasecmp(name, "blkid", namesz) == 0)
|
|
return LSBLK_METHOD_BLKID;
|
|
- if (namesz == 4 && strncasecmp(name, "file", namesz) == 0)
|
|
+ if (namesz == 4 && c_strncasecmp(name, "file", namesz) == 0)
|
|
return LSBLK_METHOD_FILE;
|
|
|
|
warnx(_("unknown properties probing method: %s"), name);
|
|
@@ -472,7 +473,7 @@ const char *lsblk_parttype_code_to_string(const char *code, const char *pttype)
|
|
const struct lsblk_parttype *t = &gpt_types[i];
|
|
|
|
if (t->name && t->typestr &&
|
|
- strcasecmp(code, t->typestr) == 0)
|
|
+ c_strcasecmp(code, t->typestr) == 0)
|
|
return t->name;
|
|
}
|
|
}
|
|
diff --git a/misc-utils/lsblk.c b/misc-utils/lsblk.c
|
|
index 6a8dc50..bd2621c 100644
|
|
--- a/misc-utils/lsblk.c
|
|
+++ b/misc-utils/lsblk.c
|
|
@@ -40,6 +40,7 @@
|
|
#include <blkid.h>
|
|
|
|
#include "c.h"
|
|
+#include "cctype.h"
|
|
#include "pathnames.h"
|
|
#include "blkdev.h"
|
|
#include "canonicalize.h"
|
|
@@ -350,7 +351,7 @@ static int column_name_to_id(const char *name, size_t namesz)
|
|
for (i = 0; i < ARRAY_SIZE(infos); i++) {
|
|
const char *cn = infos[i].name;
|
|
|
|
- if (!strncasecmp(name, cn, namesz) && !*(cn + namesz))
|
|
+ if (!c_strncasecmp(name, cn, namesz) && !*(cn + namesz))
|
|
return i;
|
|
}
|
|
|
|
@@ -362,7 +363,7 @@ static int column_name_to_id(const char *name, size_t namesz)
|
|
for (i = 0; i < ARRAY_SIZE(infos); i++) {
|
|
if (scols_shellvar_name(infos[i].name, &buf, &bufsz) != 0)
|
|
continue;
|
|
- if (!strncasecmp(name, buf, namesz) && !*(buf + namesz)) {
|
|
+ if (!c_strncasecmp(name, buf, namesz) && !*(buf + namesz)) {
|
|
free(buf);
|
|
return i;
|
|
}
|
|
@@ -463,7 +464,7 @@ static char *get_type(struct lsblk_device *dev)
|
|
|
|
if (dm_uuid_prefix) {
|
|
/* kpartx hack to remove partition number */
|
|
- if (strncasecmp(dm_uuid_prefix, "part", 4) == 0)
|
|
+ if (c_strncasecmp(dm_uuid_prefix, "part", 4) == 0)
|
|
dm_uuid_prefix[4] = '\0';
|
|
|
|
res = xstrdup(dm_uuid_prefix);
|