summaryrefslogtreecommitdiff
path: root/libswresample
diff options
context:
space:
mode:
authorMuhammad Faiz <mfcc64@gmail.com>2016-12-13 14:11:48 +0700
committerMuhammad Faiz <mfcc64@gmail.com>2016-12-14 00:43:44 +0700
commit6a8c0d83572deabc4cd1920b6d71cc65a37acc57 (patch)
tree7daae4b6915e2f66caba215562921a377f4eaf16 /libswresample
parentf0bdd538712d8ed34120ab2b7bd1409fcc99fb45 (diff)
downloadffmpeg-6a8c0d83572deabc4cd1920b6d71cc65a37acc57.tar.gz
swresample/resample: do not allow negative dst_size return value
This should fix Ticket6012 Reviewed-by: Michael Niedermayer <michael@niedermayer.cc> Signed-off-by: Muhammad Faiz <mfcc64@gmail.com>
Diffstat (limited to 'libswresample')
-rw-r--r--libswresample/resample.c7
1 files changed, 4 insertions, 3 deletions
diff --git a/libswresample/resample.c b/libswresample/resample.c
index 71dffb9a3e..ce6a82f132 100644
--- a/libswresample/resample.c
+++ b/libswresample/resample.c
@@ -478,8 +478,9 @@ static int swri_resample(ResampleContext *c,
int64_t incr= (1LL<<32) * c->dst_incr / c->src_incr;
int new_size = (src_size * (int64_t)c->src_incr - frac + c->dst_incr - 1) / c->dst_incr;
- dst_size= FFMIN(dst_size, new_size);
- c->dsp.resample_one(dst, src, dst_size, index2, incr);
+ dst_size = FFMAX(FFMIN(dst_size, new_size), 0);
+ if (dst_size > 0)
+ c->dsp.resample_one(dst, src, dst_size, index2, incr);
index += dst_size * c->dst_incr_div;
index += (frac + dst_size * (int64_t)c->dst_incr_mod) / c->src_incr;
@@ -494,7 +495,7 @@ static int swri_resample(ResampleContext *c,
int64_t delta_frac = (end_index - c->index) * c->src_incr - c->frac;
int delta_n = (delta_frac + c->dst_incr - 1) / c->dst_incr;
- dst_size = FFMIN(dst_size, delta_n);
+ dst_size = FFMAX(FFMIN(dst_size, delta_n), 0);
if (dst_size > 0) {
/* resample_linear and resample_common should have same behavior
* when frac and dst_incr_mod are zero */