Hi!

Similar reason as last mem.c patch: av_fast_realloc() can currently
fail in situations where the allocation is possible and allowed.
The patch does not change behaviour for the failure case, if this is
wanted, it should be done separately.

Please comment, Carl Eugen
From ac69f4e8402f7c7ee6df09c0450354e2bb900e5a Mon Sep 17 00:00:00 2001
From: Carl Eugen Hoyos <ceffm...@gmail.com>
Date: Mon, 1 Jan 2018 23:04:58 +0100
Subject: [PATCH] lavu/mem: Allow allocations close to max_alloc_size with
 av_fast_realloc().

---
 libavutil/mem.c |    5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/libavutil/mem.c b/libavutil/mem.c
index 0729e1d..934987f 100644
--- a/libavutil/mem.c
+++ b/libavutil/mem.c
@@ -466,7 +466,10 @@ void *av_fast_realloc(void *ptr, unsigned int *size, size_t min_size)
     if (min_size <= *size)
         return ptr;
 
-    min_size = FFMAX(min_size + min_size / 16 + 32, min_size);
+    if (min_size > (max_alloc_size - 32))
+        return NULL;
+
+    min_size = FFMIN(max_alloc_size - 32, FFMAX(min_size + min_size / 16 + 32, min_size));
 
     ptr = av_realloc(ptr, min_size);
     /* we could set this to the unmodified min_size but this is safer
-- 
1.7.10.4

_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
http://ffmpeg.org/mailman/listinfo/ffmpeg-devel

Reply via email to