summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2018-03-27 14:56:04 +0200
committerSven Eden <yamakuzure@gmx.net>2018-08-24 16:47:08 +0200
commit1a32e6e6b0f8efd825ba0c4fc4d144a65f799455 (patch)
treea21e91a150a83b2b7aa42d07ba30f3230ed52d5d
parenta050646566dba3b7740649fed16db16e202d8977 (diff)
util: check for overflows in xbsearch_r()
-rw-r--r--src/basic/util.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/src/basic/util.c b/src/basic/util.c
index e096e3194..3ea2e6f67 100644
--- a/src/basic/util.c
+++ b/src/basic/util.c
@@ -186,11 +186,13 @@ void *xbsearch_r(const void *key, const void *base, size_t nmemb, size_t size,
const void *p;
int comparison;
+ assert(!size_multiply_overflow(nmemb, size));
+
l = 0;
u = nmemb;
while (l < u) {
idx = (l + u) / 2;
- p = (const char *) base + idx * size;
+ p = (const uint8_t*) base + idx * size;
comparison = compar(key, p, arg);
if (comparison < 0)
u = idx;