mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2024-12-23 12:43:46 +02:00
resample: allocate a large enough output buffer
Fixes invalid writes and crashes when doing conversions such as stereo to 5.1 channels or sample rate conversion on 5.1 channels.
This commit is contained in:
parent
b1740cb00a
commit
6ca3b248e2
@ -272,11 +272,13 @@ int audio_resample(ReSampleContext *s, short *output, short *input, int nb_sampl
|
|||||||
lenout = 4 * nb_samples * s->ratio + 16;
|
lenout = 4 * nb_samples * s->ratio + 16;
|
||||||
|
|
||||||
if (s->sample_fmt[1] != AV_SAMPLE_FMT_S16) {
|
if (s->sample_fmt[1] != AV_SAMPLE_FMT_S16) {
|
||||||
|
int out_size = lenout * av_get_bytes_per_sample(s->sample_fmt[1]) *
|
||||||
|
s->output_channels;
|
||||||
output_bak = output;
|
output_bak = output;
|
||||||
|
|
||||||
if (!s->buffer_size[1] || s->buffer_size[1] < lenout) {
|
if (!s->buffer_size[1] || s->buffer_size[1] < out_size) {
|
||||||
av_free(s->buffer[1]);
|
av_free(s->buffer[1]);
|
||||||
s->buffer_size[1] = lenout;
|
s->buffer_size[1] = out_size;
|
||||||
s->buffer[1] = av_malloc(s->buffer_size[1]);
|
s->buffer[1] = av_malloc(s->buffer_size[1]);
|
||||||
if (!s->buffer[1]) {
|
if (!s->buffer[1]) {
|
||||||
av_log(s->resample_context, AV_LOG_ERROR, "Could not allocate buffer\n");
|
av_log(s->resample_context, AV_LOG_ERROR, "Could not allocate buffer\n");
|
||||||
|
Loading…
Reference in New Issue
Block a user