Message ID | CAB0OVGpxCBORqRGfSpaVjtP7bPonsRD_jXDvsLtcrY6uFNAQPA@mail.gmail.com |
---|---|
State | Superseded |
Headers | show |
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 [...]
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