leak-detective: Make sure to actually call malloc() from calloc() hook
authorTobias Brunner <tobias@strongswan.org>
Wed, 15 Jun 2016 09:22:04 +0000 (11:22 +0200)
committerTobias Brunner <tobias@strongswan.org>
Wed, 15 Jun 2016 14:21:47 +0000 (16:21 +0200)
Newer versions of GCC are too "smart" and replace a call to malloc(X)
followed by a call to memset(0,X) with a call co calloc(), which obviously
results in an infinite loop when it does that in our own calloc()
implementation.  Using `volatile` for the variable storing the total size
prevents the optimization and we actually call malloc().

src/libstrongswan/utils/leak_detective.c

index 1543c7f..a0bdae7 100644 (file)
@@ -810,10 +810,11 @@ HOOK(void*, malloc, size_t bytes)
 HOOK(void*, calloc, size_t nmemb, size_t size)
 {
        void *ptr;
+       volatile size_t total;
 
-       size *= nmemb;
-       ptr = malloc(size);
-       memset(ptr, 0, size);
+       total = nmemb * size;
+       ptr = malloc(total);
+       memset(ptr, 0, total);
 
        return ptr;
 }