333 lines
9.9 KiB
Diff
333 lines
9.9 KiB
Diff
From 3dad44a1a963fc6f9dffd67402a18cb445e8d7b0 Mon Sep 17 00:00:00 2001
|
|
From: =?UTF-8?q?Christian=20G=C3=B6ttsche?= <cgzones@googlemail.com>
|
|
Date: Wed, 1 Nov 2023 17:56:35 +0100
|
|
Subject: [PATCH] libselinux: cast to unsigned char for character handling
|
|
function
|
|
MIME-Version: 1.0
|
|
Content-Type: text/plain; charset=UTF-8
|
|
Content-Transfer-Encoding: 8bit
|
|
|
|
Character handling functions, like isspace(3), expect a value
|
|
representable as unsigned char or equal to EOF. Otherwise the behavior
|
|
is undefined.
|
|
|
|
See https://wiki.sei.cmu.edu/confluence/display/c/STR37-C.+Arguments+to+character-handling+functions+must+be+representable+as+an+unsigned+char
|
|
|
|
Signed-off-by: Christian Göttsche <cgzones@googlemail.com>
|
|
Acked-by: James Carter <jwcart2@gmail.com>
|
|
---
|
|
libselinux/src/booleans.c | 8 ++++----
|
|
libselinux/src/compute_create.c | 2 +-
|
|
libselinux/src/get_context_list.c | 12 ++++++------
|
|
libselinux/src/get_default_type.c | 2 +-
|
|
libselinux/src/label_file.c | 8 ++++----
|
|
libselinux/src/label_media.c | 2 +-
|
|
libselinux/src/label_support.c | 8 ++++----
|
|
libselinux/src/label_x.c | 2 +-
|
|
libselinux/src/load_policy.c | 2 +-
|
|
libselinux/src/matchmediacon.c | 6 +++---
|
|
libselinux/src/selinux_check_securetty_context.c | 4 ++--
|
|
libselinux/src/selinux_config.c | 12 ++++++------
|
|
libselinux/src/seusers.c | 6 +++---
|
|
13 files changed, 37 insertions(+), 37 deletions(-)
|
|
|
|
diff --git a/src/booleans.c b/src/booleans.c
|
|
index e34b39ff..c557df65 100644
|
|
--- a/src/booleans.c
|
|
+++ b/src/booleans.c
|
|
@@ -107,7 +107,7 @@ char *selinux_boolean_sub(const char *name)
|
|
char *ptr;
|
|
char *src = line_buf;
|
|
char *dst;
|
|
- while (*src && isspace(*src))
|
|
+ while (*src && isspace((unsigned char)*src))
|
|
src++;
|
|
if (!*src)
|
|
continue;
|
|
@@ -115,19 +115,19 @@ char *selinux_boolean_sub(const char *name)
|
|
continue;
|
|
|
|
ptr = src;
|
|
- while (*ptr && !isspace(*ptr))
|
|
+ while (*ptr && !isspace((unsigned char)*ptr))
|
|
ptr++;
|
|
*ptr++ = '\0';
|
|
if (strcmp(src, name) != 0)
|
|
continue;
|
|
|
|
dst = ptr;
|
|
- while (*dst && isspace(*dst))
|
|
+ while (*dst && isspace((unsigned char)*dst))
|
|
dst++;
|
|
if (!*dst)
|
|
continue;
|
|
ptr = dst;
|
|
- while (*ptr && !isspace(*ptr))
|
|
+ while (*ptr && !isspace((unsigned char)*ptr))
|
|
ptr++;
|
|
*ptr = '\0';
|
|
|
|
diff --git a/src/compute_create.c b/src/compute_create.c
|
|
index e9f3c96a..d19baa0b 100644
|
|
--- a/src/compute_create.c
|
|
+++ b/src/compute_create.c
|
|
@@ -13,7 +13,7 @@
|
|
|
|
static int object_name_encode(const char *objname, char *buffer, size_t buflen)
|
|
{
|
|
- int code;
|
|
+ unsigned char code;
|
|
size_t offset = 0;
|
|
|
|
if (buflen - offset < 1)
|
|
diff --git a/src/get_context_list.c b/src/get_context_list.c
|
|
index d774b9cf..0342823c 100644
|
|
--- a/src/get_context_list.c
|
|
+++ b/src/get_context_list.c
|
|
@@ -170,27 +170,27 @@ static int get_context_user(FILE * fp,
|
|
|
|
/* Skip leading whitespace. */
|
|
start = line;
|
|
- while (*start && isspace(*start))
|
|
+ while (*start && isspace((unsigned char)*start))
|
|
start++;
|
|
if (!(*start))
|
|
continue;
|
|
|
|
/* Find the end of the (partial) fromcon in the line. */
|
|
end = start;
|
|
- while (*end && !isspace(*end))
|
|
+ while (*end && !isspace((unsigned char)*end))
|
|
end++;
|
|
if (!(*end))
|
|
continue;
|
|
|
|
/* Check for a match. */
|
|
linerole = start;
|
|
- while (*start && !isspace(*start) && *start != ':')
|
|
+ while (*start && !isspace((unsigned char)*start) && *start != ':')
|
|
start++;
|
|
if (*start != ':')
|
|
continue;
|
|
*start = 0;
|
|
linetype = ++start;
|
|
- while (*start && !isspace(*start) && *start != ':')
|
|
+ while (*start && !isspace((unsigned char)*start) && *start != ':')
|
|
start++;
|
|
if (!(*start))
|
|
continue;
|
|
@@ -210,14 +210,14 @@ static int get_context_user(FILE * fp,
|
|
start = ++end;
|
|
while (*start) {
|
|
/* Skip leading whitespace */
|
|
- while (*start && isspace(*start))
|
|
+ while (*start && isspace((unsigned char)*start))
|
|
start++;
|
|
if (!(*start))
|
|
break;
|
|
|
|
/* Find the end of this partial context. */
|
|
end = start;
|
|
- while (*end && !isspace(*end))
|
|
+ while (*end && !isspace((unsigned char)*end))
|
|
end++;
|
|
if (*end)
|
|
*end++ = 0;
|
|
diff --git a/src/get_default_type.c b/src/get_default_type.c
|
|
index 766ea4b7..87e9c72c 100644
|
|
--- a/src/get_default_type.c
|
|
+++ b/src/get_default_type.c
|
|
@@ -42,7 +42,7 @@ static int find_default_type(FILE * fp, const char *role, char **type)
|
|
buf[strlen(buf) - 1] = 0;
|
|
|
|
ptr = buf;
|
|
- while (*ptr && isspace(*ptr))
|
|
+ while (*ptr && isspace((unsigned char)*ptr))
|
|
ptr++;
|
|
if (!(*ptr))
|
|
continue;
|
|
diff --git a/src/label_file.c b/src/label_file.c
|
|
index a665c9b4..4778f8f8 100644
|
|
--- a/src/label_file.c
|
|
+++ b/src/label_file.c
|
|
@@ -708,20 +708,20 @@ static int selabel_subs_init(const char *path, struct selabel_digest *digest,
|
|
char *src = buf;
|
|
char *dst = NULL;
|
|
|
|
- while (*src && isspace(*src))
|
|
+ while (*src && isspace((unsigned char)*src))
|
|
src++;
|
|
if (src[0] == '#') continue;
|
|
ptr = src;
|
|
- while (*ptr && ! isspace(*ptr))
|
|
+ while (*ptr && ! isspace((unsigned char)*ptr))
|
|
ptr++;
|
|
*ptr++ = '\0';
|
|
if (! *src) continue;
|
|
|
|
dst = ptr;
|
|
- while (*dst && isspace(*dst))
|
|
+ while (*dst && isspace((unsigned char)*dst))
|
|
dst++;
|
|
ptr = dst;
|
|
- while (*ptr && ! isspace(*ptr))
|
|
+ while (*ptr && ! isspace((unsigned char)*ptr))
|
|
ptr++;
|
|
*ptr = '\0';
|
|
if (! *dst)
|
|
diff --git a/src/label_media.c b/src/label_media.c
|
|
index d33b614a..b3443b47 100644
|
|
--- a/src/label_media.c
|
|
+++ b/src/label_media.c
|
|
@@ -39,7 +39,7 @@ static int process_line(const char *path, char *line_buf, int pass,
|
|
char *key, *context;
|
|
|
|
buf_p = line_buf;
|
|
- while (isspace(*buf_p))
|
|
+ while (isspace((unsigned char)*buf_p))
|
|
buf_p++;
|
|
/* Skip comment lines and empty lines. */
|
|
if (*buf_p == '#' || *buf_p == 0)
|
|
diff --git a/src/label_support.c b/src/label_support.c
|
|
index 49f72b1c..f7ab9292 100644
|
|
--- a/src/label_support.c
|
|
+++ b/src/label_support.c
|
|
@@ -26,14 +26,14 @@ static inline int read_spec_entry(char **entry, char **ptr, int *len, const char
|
|
*entry = NULL;
|
|
char *tmp_buf = NULL;
|
|
|
|
- while (isspace(**ptr) && **ptr != '\0')
|
|
+ while (isspace((unsigned char)**ptr) && **ptr != '\0')
|
|
(*ptr)++;
|
|
|
|
tmp_buf = *ptr;
|
|
*len = 0;
|
|
|
|
- while (!isspace(**ptr) && **ptr != '\0') {
|
|
- if (!isascii(**ptr)) {
|
|
+ while (!isspace((unsigned char)**ptr) && **ptr != '\0') {
|
|
+ if (!isascii((unsigned char)**ptr)) {
|
|
errno = EINVAL;
|
|
*errbuf = "Non-ASCII characters found";
|
|
return -1;
|
|
@@ -80,7 +80,7 @@ int read_spec_entries(char *line_buf, const char **errbuf, int num_args, ...)
|
|
len++;
|
|
|
|
buf_p = line_buf;
|
|
- while (isspace(*buf_p))
|
|
+ while (isspace((unsigned char)*buf_p))
|
|
buf_p++;
|
|
|
|
/* Skip comment lines and empty lines. */
|
|
diff --git a/src/label_x.c b/src/label_x.c
|
|
index 4b8f524f..e15190ca 100644
|
|
--- a/src/label_x.c
|
|
+++ b/src/label_x.c
|
|
@@ -41,7 +41,7 @@ static int process_line(const char *path, char *line_buf, int pass,
|
|
char *type, *key, *context;
|
|
|
|
buf_p = line_buf;
|
|
- while (isspace(*buf_p))
|
|
+ while (isspace((unsigned char)*buf_p))
|
|
buf_p++;
|
|
/* Skip comment lines and empty lines. */
|
|
if (*buf_p == '#' || *buf_p == 0)
|
|
diff --git a/src/load_policy.c b/src/load_policy.c
|
|
index 17918e8b..57d7aaef 100644
|
|
--- a/src/load_policy.c
|
|
+++ b/src/load_policy.c
|
|
@@ -252,7 +252,7 @@ int selinux_init_load_policy(int *enforce)
|
|
}
|
|
if (fgets(buf, selinux_page_size, cfg) &&
|
|
(tmp = strstr(buf, "enforcing="))) {
|
|
- if (tmp == buf || isspace(*(tmp - 1))) {
|
|
+ if (tmp == buf || isspace((unsigned char)*(tmp - 1))) {
|
|
secmdline =
|
|
atoi(tmp + sizeof("enforcing=") - 1);
|
|
}
|
|
diff --git a/src/matchmediacon.c b/src/matchmediacon.c
|
|
index d3d95043..6ba87b99 100644
|
|
--- a/src/matchmediacon.c
|
|
+++ b/src/matchmediacon.c
|
|
@@ -29,7 +29,7 @@ int matchmediacon(const char *media, char ** con)
|
|
current_line[strlen(current_line) - 1] = 0;
|
|
/* Skip leading whitespace before the partial context. */
|
|
ptr = current_line;
|
|
- while (*ptr && isspace(*ptr))
|
|
+ while (*ptr && isspace((unsigned char)*ptr))
|
|
ptr++;
|
|
|
|
if (!(*ptr))
|
|
@@ -37,7 +37,7 @@ int matchmediacon(const char *media, char ** con)
|
|
|
|
/* Find the end of the media context. */
|
|
ptr2 = ptr;
|
|
- while (*ptr2 && !isspace(*ptr2))
|
|
+ while (*ptr2 && !isspace((unsigned char)*ptr2))
|
|
ptr2++;
|
|
if (!(*ptr2))
|
|
continue;
|
|
@@ -53,7 +53,7 @@ int matchmediacon(const char *media, char ** con)
|
|
return -1;
|
|
|
|
/* Skip whitespace. */
|
|
- while (*ptr2 && isspace(*ptr2))
|
|
+ while (*ptr2 && isspace((unsigned char)*ptr2))
|
|
ptr2++;
|
|
if (!(*ptr2)) {
|
|
return -1;
|
|
diff --git a/src/selinux_check_securetty_context.c b/src/selinux_check_securetty_context.c
|
|
index c5c557fd..7609752e 100644
|
|
--- a/src/selinux_check_securetty_context.c
|
|
+++ b/src/selinux_check_securetty_context.c
|
|
@@ -26,13 +26,13 @@ int selinux_check_securetty_context(const char * tty_context)
|
|
|
|
/* Skip leading whitespace. */
|
|
start = line;
|
|
- while (*start && isspace(*start))
|
|
+ while (*start && isspace((unsigned char)*start))
|
|
start++;
|
|
if (!(*start))
|
|
continue;
|
|
|
|
end = start;
|
|
- while (*end && !isspace(*end))
|
|
+ while (*end && !isspace((unsigned char)*end))
|
|
end++;
|
|
if (*end)
|
|
*end++ = 0;
|
|
diff --git a/src/seusers.c b/src/seusers.c
|
|
index fff80c1a..6da8c318 100644
|
|
--- a/src/seusers.c
|
|
+++ b/src/seusers.c
|
|
@@ -25,7 +25,7 @@ static int process_seusers(const char *buffer,
|
|
goto err;
|
|
|
|
start = newbuf;
|
|
- while (isspace(*start))
|
|
+ while (isspace((unsigned char)*start))
|
|
start++;
|
|
if (*start == '#' || *start == 0) {
|
|
free(newbuf);
|
|
@@ -46,7 +46,7 @@ static int process_seusers(const char *buffer,
|
|
mls_found = 0;
|
|
|
|
end = start;
|
|
- while (*end && !isspace(*end))
|
|
+ while (*end && !isspace((unsigned char)*end))
|
|
end++;
|
|
}
|
|
*end = 0;
|
|
@@ -63,7 +63,7 @@ static int process_seusers(const char *buffer,
|
|
goto out;
|
|
|
|
start = ++end;
|
|
- while (*end && !isspace(*end))
|
|
+ while (*end && !isspace((unsigned char)*end))
|
|
end++;
|
|
*end = 0;
|
|
|
|
--
|
|
2.27.0
|
|
|