2018-01-02 1:14 GMT+01:00 Michael Niedermayer <mich...@niedermayer.cc>:
> On Mon, Jan 01, 2018 at 11:10:57PM +0100, Carl Eugen Hoyos wrote:
>> 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
>
>>  mem.c |    5 ++++-
>>  1 file changed, 4 insertions(+), 1 deletion(-)
>> 7529e1d584c62ece463f4461279ea6e3973162c9  
>> 0001-lavu-mem-Allow-allocations-close-to-max_alloc_size-w.patch
>> 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;
>
> This failure mode differs from the existing in what it does with *size

New patch attached.

Thank you, Carl Eugen
From 9586fb78e4b304923569a09fb275ece0531726e0 Mon Sep 17 00:00:00 2001
From: Carl Eugen Hoyos <ceffm...@gmail.com>
Date: Tue, 2 Jan 2018 01:58:35 +0100
Subject: [PATCH] lavu/mem: Allow allocations close to max_alloc_size with
 av_fast_realloc().

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

diff --git a/libavutil/mem.c b/libavutil/mem.c
index 0729e1d..6149755 100644
--- a/libavutil/mem.c
+++ b/libavutil/mem.c
@@ -466,7 +466,12 @@ 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) {
+        *size = 0;
+        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