Projects
openEuler:24.03:SP1:Everything
audit
_service:tar_scm:backport-lib-cast-to-unsigned-...
Sign Up
Log In
Username
Password
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File _service:tar_scm:backport-lib-cast-to-unsigned-char-for-character-test-functio.patch of Package audit
From 3aa3ccb2bb1c8804fbf43b260c93b65e831242c1 Mon Sep 17 00:00:00 2001 From: cgzones <cgzones@googlemail.com> Date: Thu, 2 Nov 2023 21:20:40 +0100 Subject: [PATCH] lib: cast to unsigned char for character test functions (#338) Passing a value not representable by unsigned char is undefined behavior. Reference:https://github.com/linux-audit/audit-userspace/commit/3aa3ccb2bb1c8804fbf43b260c93b65e831242c1 Conflict:NA --- lib/libaudit.c | 32 ++++++++++++++++---------------- lib/lookup_table.c | 2 +- 2 files changed, 17 insertions(+), 17 deletions(-) diff --git a/lib/libaudit.c b/lib/libaudit.c index 960525a..abcdf4a 100644 --- a/lib/libaudit.c +++ b/lib/libaudit.c @@ -1031,7 +1031,7 @@ int audit_rule_syscallbyname_data(struct audit_rule_data *rule, return -2; nr = audit_name_to_syscall(scall, machine); if (nr < 0) { - if (isdigit(scall[0])) + if (isdigit((unsigned char)scall[0])) nr = strtol(scall, NULL, 0); } if (nr >= 0) @@ -1056,7 +1056,7 @@ int audit_rule_io_uringbyname_data(struct audit_rule_data *rule, } nr = audit_name_to_uringop(scall); if (nr < 0) { - if (isdigit(scall[0])) + if (isdigit((unsigned char)scall[0])) nr = strtol(scall, NULL, 0); } if (nr >= 0) @@ -1585,11 +1585,11 @@ int audit_rule_fieldpair_data(struct audit_rule_data **rulep, const char *pair, case AUDIT_OBJ_UID: // Do positive & negative separate for 32 bit systems vlen = strlen(v); - if (isdigit((char)*(v))) + if (isdigit((unsigned char)*(v))) rule->values[rule->field_count] = strtoul(v, NULL, 0); else if (vlen >= 2 && *(v)=='-' && - (isdigit((char)*(v+1)))) + (isdigit((unsigned char)*(v+1)))) rule->values[rule->field_count] = strtol(v, NULL, 0); else { @@ -1609,7 +1609,7 @@ int audit_rule_fieldpair_data(struct audit_rule_data **rulep, const char *pair, case AUDIT_SGID: case AUDIT_FSGID: case AUDIT_OBJ_GID: - if (isdigit((char)*(v))) + if (isdigit((unsigned char)*(v))) rule->values[rule->field_count] = strtol(v, NULL, 0); else { @@ -1625,11 +1625,11 @@ int audit_rule_fieldpair_data(struct audit_rule_data **rulep, const char *pair, if (flags != AUDIT_FILTER_EXIT) return -EAU_EXITONLY; vlen = strlen(v); - if (isdigit((char)*(v))) + if (isdigit((unsigned char)*(v))) rule->values[rule->field_count] = strtol(v, NULL, 0); else if (vlen >= 2 && *(v)=='-' && - (isdigit((char)*(v+1)))) + (isdigit((unsigned char)*(v+1)))) rule->values[rule->field_count] = strtol(v, NULL, 0); else { @@ -1644,7 +1644,7 @@ int audit_rule_fieldpair_data(struct audit_rule_data **rulep, const char *pair, flags != AUDIT_FILTER_USER) return -EAU_MSGTYPEEXCLUDEUSER; - if (isdigit((char)*(v))) + if (isdigit((unsigned char)*(v))) rule->values[rule->field_count] = strtol(v, NULL, 0); else @@ -1715,7 +1715,7 @@ int audit_rule_fieldpair_data(struct audit_rule_data **rulep, const char *pair, return -EAU_ARCHMISPLACED; if (!(op == AUDIT_NOT_EQUAL || op == AUDIT_EQUAL)) return -EAU_OPEQNOTEQ; - if (isdigit((char)*(v))) { + if (isdigit((unsigned char)*(v))) { int machine; errno = 0; @@ -1757,7 +1757,7 @@ int audit_rule_fieldpair_data(struct audit_rule_data **rulep, const char *pair, return -EAU_STRTOOLONG; for (i = 0; i < len; i++) { - switch (tolower(v[i])) { + switch (tolower((unsigned char)v[i])) { case 'r': val |= AUDIT_PERM_READ; break; @@ -1791,7 +1791,7 @@ int audit_rule_fieldpair_data(struct audit_rule_data **rulep, const char *pair, return -EAU_FIELDUNAVAIL; if (!(op == AUDIT_NOT_EQUAL || op == AUDIT_EQUAL)) return -EAU_OPEQNOTEQ; - if (isdigit((char)*(v))) + if (isdigit((unsigned char)*(v))) rule->values[rule->field_count] = strtoul(v, NULL, 0); else @@ -1804,11 +1804,11 @@ int audit_rule_fieldpair_data(struct audit_rule_data **rulep, const char *pair, break; case AUDIT_ARG0...AUDIT_ARG3: vlen = strlen(v); - if (isdigit((char)*(v))) + if (isdigit((unsigned char)*(v))) rule->values[rule->field_count] = strtoul(v, NULL, 0); else if (vlen >= 2 && *(v)=='-' && - (isdigit((char)*(v+1)))) + (isdigit((unsigned char)*(v+1)))) rule->values[rule->field_count] = strtol(v, NULL, 0); else @@ -1824,11 +1824,11 @@ int audit_rule_fieldpair_data(struct audit_rule_data **rulep, const char *pair, return -EAU_FIELDNOFILTER; // Do positive & negative separate for 32 bit systems vlen = strlen(v); - if (isdigit((char)*(v))) + if (isdigit((unsigned char)*(v))) rule->values[rule->field_count] = strtoul(v, NULL, 0); else if (vlen >= 2 && *(v)=='-' && - (isdigit((char)*(v+1)))) + (isdigit((unsigned char)*(v+1)))) rule->values[rule->field_count] = strtol(v, NULL, 0); else if (strcmp(v, "unset") == 0) @@ -1854,7 +1854,7 @@ int audit_rule_fieldpair_data(struct audit_rule_data **rulep, const char *pair, if (field == AUDIT_PPID && !(flags==AUDIT_FILTER_EXIT)) return -EAU_EXITONLY; - if (!isdigit((char)*(v))) + if (!isdigit((unsigned char)*(v))) return -EAU_FIELDVALNUM; if (field == AUDIT_INODE) diff --git a/lib/lookup_table.c b/lib/lookup_table.c index 2f5e6cd..d839205 100644 --- a/lib/lookup_table.c +++ b/lib/lookup_table.c @@ -255,7 +255,7 @@ int audit_name_to_msg_type(const char *msg_type) strncpy(buf, msg_type + 8, len); errno = 0; return strtol(buf, NULL, 10); - } else if (isdigit(*msg_type)) { + } else if (isdigit((unsigned char)*msg_type)) { errno = 0; return strtol(msg_type, NULL, 10); } -- 2.33.0
Locations
Projects
Search
Status Monitor
Help
Open Build Service
OBS Manuals
API Documentation
OBS Portal
Reporting a Bug
Contact
Mailing List
Forums
Chat (IRC)
Twitter
Open Build Service (OBS)
is an
openSUSE project
.
浙ICP备2022010568号-2