diff options
author | Allen Winter <allen.winter@kdab.com> | 2022-03-06 10:14:19 -0500 |
---|---|---|
committer | Allen Winter <allen.winter@kdab.com> | 2022-03-06 10:14:19 -0500 |
commit | e947506ed1e5f3366cde413fe746a3a63f7a1efa (patch) | |
tree | ae93e010e93ecca06c7e698b5f34aaf2174a69b0 | |
parent | 0f33ebaff96143b2ab9001f3841f1c51c8cc2814 (diff) | |
download | libical-git-e947506ed1e5f3366cde413fe746a3a63f7a1efa.tar.gz |
icalenums.c - ensure we can't overflow request_status_map
based on a patch by yukuan <yukuan@uniontech.com>
-rw-r--r-- | src/libical/icalenums.c | 15 |
1 files changed, 10 insertions, 5 deletions
diff --git a/src/libical/icalenums.c b/src/libical/icalenums.c index 4e184795..6f2ee32a 100644 --- a/src/libical/icalenums.c +++ b/src/libical/icalenums.c @@ -81,7 +81,8 @@ const char *icalenum_reqstat_desc(icalrequeststatus stat) { int i; - for (i = 0; request_status_map[i].kind != ICAL_UNKNOWN_STATUS; i++) { + int len = (int)(sizeof(request_status_map) / sizeof(request_status_map[0])); + for (i = 0; i < len && request_status_map[i].kind != ICAL_UNKNOWN_STATUS; i++) { if (request_status_map[i].kind == stat) { return request_status_map[i].str; } @@ -104,7 +105,8 @@ char *icalenum_reqstat_code_r(icalrequeststatus stat) int i, major, minor; char tmpbuf[36]; - for (i = 0; request_status_map[i].kind != ICAL_UNKNOWN_STATUS; i++) { + int len = (int)(sizeof(request_status_map) / sizeof(request_status_map[0])); + for (i = 0; i < len && request_status_map[i].kind != ICAL_UNKNOWN_STATUS; i++) { if (request_status_map[i].kind == stat) { major = request_status_map[i].major; minor = request_status_map[i].minor; @@ -119,7 +121,8 @@ short icalenum_reqstat_major(icalrequeststatus stat) { int i; - for (i = 0; request_status_map[i].kind != ICAL_UNKNOWN_STATUS; i++) { + int len = (int)(sizeof(request_status_map) / sizeof(request_status_map[0])); + for (i = 0; i < len && request_status_map[i].kind != ICAL_UNKNOWN_STATUS; i++) { if (request_status_map[i].kind == stat) { return request_status_map[i].major; } @@ -131,7 +134,8 @@ short icalenum_reqstat_minor(icalrequeststatus stat) { int i; - for (i = 0; request_status_map[i].kind != ICAL_UNKNOWN_STATUS; i++) { + int len = (int)(sizeof(request_status_map) / sizeof(request_status_map[0])); + for (i = 0; i < len && request_status_map[i].kind != ICAL_UNKNOWN_STATUS; i++) { if (request_status_map[i].kind == stat) { return request_status_map[i].minor; } @@ -143,7 +147,8 @@ icalrequeststatus icalenum_num_to_reqstat(short major, short minor) { int i; - for (i = 0; request_status_map[i].kind != ICAL_UNKNOWN_STATUS; i++) { + int len = (int)(sizeof(request_status_map) / sizeof(request_status_map[0])); + for (i = 0; i < len && request_status_map[i].kind != ICAL_UNKNOWN_STATUS; i++) { if (request_status_map[i].major == major && request_status_map[i].minor == minor) { return request_status_map[i].kind; } |