File: lsblk-avoid-strcasecmp-for-ASCII-only-strings.patch

package info (click to toggle)
util-linux 2.41-5
  • links: PTS, VCS
  • area: main
  • in suites: sid, trixie
  • size: 95,208 kB
  • sloc: ansic: 179,016; sh: 22,689; yacc: 1,284; makefile: 528; xml: 422; python: 316; lex: 89; ruby: 75; csh: 37; exp: 19; sed: 16; perl: 15; sql: 9
file content (93 lines) | stat: -rw-r--r-- 3,218 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
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);