diff mbox

[FFmpeg-devel,RFC] lavu/mem: Allow allocations close to max_alloc_size with av_fast_realloc()

Message ID CAB0OVGpxCBORqRGfSpaVjtP7bPonsRD_jXDvsLtcrY6uFNAQPA@mail.gmail.com
State Superseded
Headers show

Commit Message

Carl Eugen Hoyos Jan. 1, 2018, 10:10 p.m. UTC
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

Comments

Michael Niedermayer Jan. 2, 2018, 12:14 a.m. UTC | #1
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 <ceffmpeg@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

[...]
diff mbox

Patch

From ac69f4e8402f7c7ee6df09c0450354e2bb900e5a Mon Sep 17 00:00:00 2001
From: Carl Eugen Hoyos <ceffmpeg@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