@@ -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';
@@ -23,7 +23,7 @@ static int object_name_encode(const char *objname, char *buffer, size_t buflen)
do {
code = *objname++;
- if (isalnum(code) || code == '\0' || code == '-' ||
+ if (isalnum((unsigned char)code) || code == '\0' || code == '-' ||
code == '.' || code == '_' || code == '~') {
if (buflen - offset < 1)
return -1;
@@ -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;
@@ -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;
@@ -697,20 +697,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)
@@ -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)
@@ -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. */
@@ -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)
@@ -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);
}
@@ -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;
@@ -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;
@@ -103,7 +103,7 @@ int selinux_getenforcemode(int *enforce)
if (strncmp(buf, SELINUXTAG, len))
continue;
tag = buf+len;
- while (isspace(*tag))
+ while (isspace((unsigned char)*tag))
tag++;
if (!strncasecmp
(tag, "enforcing", sizeof("enforcing") - 1)) {
@@ -173,7 +173,7 @@ static void init_selinux_config(void)
if (line_buf[len - 1] == '\n')
line_buf[len - 1] = 0;
buf_p = line_buf;
- while (isspace(*buf_p))
+ while (isspace((unsigned char)*buf_p))
buf_p++;
if (*buf_p == '#' || *buf_p == 0)
continue;
@@ -181,7 +181,7 @@ static void init_selinux_config(void)
if (!strncasecmp(buf_p, SELINUXTYPETAG,
sizeof(SELINUXTYPETAG) - 1)) {
buf_p += sizeof(SELINUXTYPETAG) - 1;
- while (isspace(*buf_p))
+ while (isspace((unsigned char)*buf_p))
buf_p++;
type = strdup(buf_p);
if (!type) {
@@ -191,7 +191,7 @@ static void init_selinux_config(void)
}
end = type + strlen(type) - 1;
while ((end > type) &&
- (isspace(*end) || iscntrl(*end))) {
+ (isspace((unsigned char)*end) || iscntrl((unsigned char)*end))) {
*end = 0;
end--;
}
@@ -206,14 +206,14 @@ static void init_selinux_config(void)
} else if (!strncmp(buf_p, REQUIRESEUSERS,
sizeof(REQUIRESEUSERS) - 1)) {
value = buf_p + sizeof(REQUIRESEUSERS) - 1;
- while (isspace(*value))
+ while (isspace((unsigned char)*value))
value++;
intptr = &require_seusers;
} else {
continue;
}
- if (isdigit(*value))
+ if (isdigit((unsigned char)*value))
*intptr = atoi(value);
else if (strncasecmp(value, "true", sizeof("true") - 1))
*intptr = 1;
@@ -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;
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> --- 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(-)