Browse Source

avfilter/af_compand: fix invalid read

Fixes #3383.
tags/n2.2-rc1
Andrew Kelley Paul B Mahol 12 years ago
parent
commit
9e329185d7
1 changed files with 6 additions and 4 deletions
  1. +6
    -4
      libavfilter/af_compand.c

+ 6
- 4
libavfilter/af_compand.c View File

@@ -46,6 +46,7 @@ typedef struct CompandContext {
char *attacks, *decays, *points;
CompandSegment *segments;
ChanParam *channels;
int nb_segments;
double in_min_lin;
double out_min_lin;
double curve_dB;
@@ -160,11 +161,11 @@ static double get_volume(CompandContext *s, double in_lin)

in_log = log(in_lin);

for (i = 1;; i++)
if (in_log <= s->segments[i + 1].x)
for (i = 1; i < s->nb_segments; i++)
if (in_log <= s->segments[i].x)
break;

cs = &s->segments[i];
cs = &s->segments[i - 1];
in_log -= cs->x;
out_log = cs->y + in_log * (cs->a * in_log + cs->b);

@@ -318,7 +319,8 @@ static int config_output(AVFilterLink *outlink)
uninit(ctx);

s->channels = av_mallocz_array(outlink->channels, sizeof(*s->channels));
s->segments = av_mallocz_array((nb_points + 4) * 2, sizeof(*s->segments));
s->nb_segments = (nb_points + 4) * 2;
s->segments = av_mallocz_array(s->nb_segments, sizeof(*s->segments));

if (!s->channels || !s->segments)
return AVERROR(ENOMEM);


Loading…
Cancel
Save