avresample: Reallocate the internal buffer to the correct size

Message ID 20150428220018.761CD5DCCC@aruru.libav.org
State New
Headers show

Commit Message

Janne Grunau April 28, 2015, 10 p.m.
Module: libav
Branch: master
Commit: 0ac8ff618c5e6d878c547a8877e714ed728950ce

Author:    Luca Barbato <lu_zero@gentoo.org>
Committer: Luca Barbato <lu_zero@gentoo.org>
Date:      Tue Apr 28 01:55:10 2015 +0200

avresample: Reallocate the internal buffer to the correct size

Fixes the corner case in which the internal buffer size
is larger than input buffer provided and resizing it
before moving the left over samples would make it write
to now unallocated memory.

Bug-Id: 825
CC: libav-stable@libav.org

Signed-off-by: Luca Barbato <lu_zero@gentoo.org>

---

 libavresample/resample.c |    4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

Patch

diff --git a/libavresample/resample.c b/libavresample/resample.c
index bf766a2..86a761b 100644
--- a/libavresample/resample.c
+++ b/libavresample/resample.c
@@ -434,7 +434,9 @@  int ff_audio_resample(ResampleContext *c, AudioData *dst, AudioData *src)
         int bps = av_get_bytes_per_sample(c->avr->internal_sample_fmt);
         int i;
 
-        ret = ff_audio_data_realloc(c->buffer, in_samples + c->padding_size);
+        ret = ff_audio_data_realloc(c->buffer,
+                                    FFMAX(in_samples, in_leftover) +
+                                    c->padding_size);
         if (ret < 0) {
             av_log(c->avr, AV_LOG_ERROR, "Error reallocating resampling buffer\n");
             return AVERROR(ENOMEM);