mirror of
https://github.com/gentoo-mirror/gentoo.git
synced 2026-08-04 00:08:09 -07:00
39 lines
1.1 KiB
Diff
39 lines
1.1 KiB
Diff
https://github.com/libconfuse/libconfuse/commit/dc7cef956d6d7c1ec792f9561f732797b52e92d4
|
|
From: Thomas Klausner <wiz@gatalith.at>
|
|
Date: Mon, 5 May 2025 23:22:51 +0200
|
|
Subject: [PATCH] Fix isspace() arguments.
|
|
|
|
Per ANSI and POSIX, isspace() only accepts arguments that
|
|
are valid 'unsigned char' or EOF.
|
|
|
|
The code passed 'char' arguments, which on many platforms are
|
|
'signed char'. These are automatically promoted to integers, keeping
|
|
the sign, so negative values like -61 are passed to isspace(),
|
|
which is not allowed per the standards.
|
|
|
|
Casting to 'unsigned char' makes sure the isspace argument is in the
|
|
allowed range.
|
|
|
|
Fixes core dump e.g. in i3status.
|
|
|
|
Closes #180.
|
|
--- a/src/lexer.l
|
|
+++ b/src/lexer.l
|
|
@@ -397,14 +397,14 @@ static char *trim_whitespace(char *str, unsigned int len)
|
|
return str;
|
|
|
|
while (len > 1) {
|
|
- if ((str[len] == 0 || isspace(str[len])) && isspace(str[len - 1]))
|
|
+ if ((str[len] == 0 || isspace((unsigned char)str[len])) && isspace((unsigned char)str[len - 1]))
|
|
len--;
|
|
else
|
|
break;
|
|
}
|
|
str[len] = 0;
|
|
|
|
- while (isspace(*str))
|
|
+ while (isspace((unsigned char)*str))
|
|
str++;
|
|
|
|
return str;
|