util: fix overflow checks
authorLennart Poettering <lennart@poettering.net>
Thu, 20 Sep 2012 15:53:03 +0000 (17:53 +0200)
committerLennart Poettering <lennart@poettering.net>
Thu, 20 Sep 2012 15:53:03 +0000 (17:53 +0200)
src/shared/util.c
src/shared/util.h

index 02ee637..be94515 100644 (file)
@@ -1184,7 +1184,7 @@ char *strnappend(const char *s, const char *suffix, size_t b) {
         assert(suffix);
 
         a = strlen(s);
-        if ((size_t) -1 - a > b)
+        if (b > ((size_t) -1) - a)
                 return NULL;
 
         r = new(char, a+b+1);
index 2e49cfd..e1d4735 100644 (file)
@@ -545,14 +545,14 @@ void closedirp(DIR **d);
 void umaskp(mode_t *u);
 
 _malloc_  static inline void *malloc_multiply(size_t a, size_t b) {
-        if (_unlikely_(a > ((size_t) -1) / b))
+        if (_unlikely_(b == 0 || a > ((size_t) -1) / b))
                 return NULL;
 
         return malloc(a * b);
 }
 
 _malloc_ static inline void *memdup_multiply(const void *p, size_t a, size_t b) {
-        if (_unlikely_(a > ((size_t) -1) / b))
+        if (_unlikely_(b == 0 || a > ((size_t) -1) / b))
                 return NULL;
 
         return memdup(p, a * b);