mirror of
https://github.com/SELinuxProject/selinux
synced 2025-02-17 10:06:51 +00:00
mcstrans: ensure transitivity in compare functions
Ensure comparison functions used by qsort(3) fulfill transitivity, since otherwise the resulting array might not be sorted correctly or worse[1] in case of integer overflows. [1]: https://www.qualys.com/2024/01/30/qsort.txt Signed-off-by: Christian Göttsche <cgzones@googlemail.com> Acked-by: James Carter <jwcart2@gmail.com>
This commit is contained in:
parent
162a0884cc
commit
fc2822a474
@ -952,9 +952,13 @@ find_in_hashtable(const char *range, domain_t *domain, context_map_node_t **tabl
|
||||
return trans;
|
||||
}
|
||||
|
||||
#define spaceship_cmp(a, b) (((a) > (b)) - ((a) < (b)))
|
||||
|
||||
static int
|
||||
string_size(const void *p1, const void *p2) {
|
||||
return strlen(*(char **)p2) - strlen(*(char **)p1);
|
||||
size_t len1 = strlen(*(const char *const *)p2);
|
||||
size_t len2 = strlen(*(const char *const *)p1);
|
||||
return spaceship_cmp(len1, len2);
|
||||
}
|
||||
|
||||
static int
|
||||
@ -965,7 +969,7 @@ word_size(const void *p1, const void *p2) {
|
||||
int w2_len=strlen(w2->text);
|
||||
if (w1_len == w2_len)
|
||||
return strcmp(w1->text, w2->text);
|
||||
return (w2_len - w1_len);
|
||||
return spaceship_cmp(w2_len, w1_len);
|
||||
}
|
||||
|
||||
static void
|
||||
|
Loading…
Reference in New Issue
Block a user