[FFmpeg-cvslog] avutil/mem: do a small set of checks for memalign hack before freeing.

Michael Niedermayer git at videolan.org
Fri Feb 22 20:58:08 CET 2013


ffmpeg | branch: master | Michael Niedermayer <michaelni at gmx.at> | Fri Feb 22 20:30:52 2013 +0100| [2c21d34ea44d38835f85b90de3cbbf54abb894be] | committer: Michael Niedermayer

avutil/mem: do a small set of checks for memalign hack before freeing.

These can detect some kinds of memory and or pointer corruptions

Signed-off-by: Michael Niedermayer <michaelni at gmx.at>

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=2c21d34ea44d38835f85b90de3cbbf54abb894be
---

 libavutil/mem.c |    9 +++++++--
 1 file changed, 7 insertions(+), 2 deletions(-)

diff --git a/libavutil/mem.c b/libavutil/mem.c
index 250b5f7..6d3efaa 100644
--- a/libavutil/mem.c
+++ b/libavutil/mem.c
@@ -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



More information about the ffmpeg-cvslog mailing list