avutil/mem: do a small set of checks for memalign hack before freeing.
authorMichael Niedermayer <michaelni@gmx.at>
Fri, 22 Feb 2013 19:30:52 +0000 (20:30 +0100)
committerMichael Niedermayer <michaelni@gmx.at>
Fri, 22 Feb 2013 19:42:33 +0000 (20:42 +0100)
These can detect some kinds of memory and or pointer corruptions

Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
libavutil/mem.c

index 250b5f7..6d3efaa 100644 (file)
@@ -36,6 +36,7 @@
 #include <malloc.h>
 #endif
 
+#include "avassert.h"
 #include "avutil.h"
 #include "intreadwrite.h"
 #include "mem.h"
@@ -148,6 +149,7 @@ void *av_realloc(void *ptr, size_t size)
     if (!ptr)
         return av_malloc(size);
     diff = ((char *)ptr)[-1];
+    av_assert0(diff>0 && diff<=ALIGN);
     ptr = realloc((char *)ptr - diff, size + diff);
     if (ptr)
         ptr = (char *)ptr + diff;
@@ -177,8 +179,11 @@ void *av_realloc_f(void *ptr, size_t nelem, size_t elsize)
 void av_free(void *ptr)
 {
 #if CONFIG_MEMALIGN_HACK
-    if (ptr)
-        free((char *)ptr - ((char *)ptr)[-1]);
+    if (ptr) {
+        int v= ((char *)ptr)[-1];
+        av_assert0(v>0 && v<=ALIGN);
+        free((char *)ptr - v);
+    }
 #elif HAVE_ALIGNED_MALLOC
     _aligned_free(ptr);
 #else