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