Browse Source

avcodec/wmavoice: Check operations that can fail

There might be segfaults on failure.

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
(cherry picked from commit e93875b756)
tags/n4.4
Andreas Rheinhardt 4 years ago
parent
commit
ed7efbe3ab
1 changed files with 6 additions and 5 deletions
  1. +6
    -5
      libavcodec/wmavoice.c

+ 6
- 5
libavcodec/wmavoice.c View File

@@ -367,7 +367,7 @@ static av_cold void wmavoice_flush(AVCodecContext *ctx)
static av_cold int wmavoice_decode_init(AVCodecContext *ctx) static av_cold int wmavoice_decode_init(AVCodecContext *ctx)
{ {
static AVOnce init_static_once = AV_ONCE_INIT; static AVOnce init_static_once = AV_ONCE_INIT;
int n, flags, pitch_range, lsp16_flag;
int n, flags, pitch_range, lsp16_flag, ret;
WMAVoiceContext *s = ctx->priv_data; WMAVoiceContext *s = ctx->priv_data;


ff_thread_once(&init_static_once, wmavoice_init_static_data); ff_thread_once(&init_static_once, wmavoice_init_static_data);
@@ -395,10 +395,11 @@ static av_cold int wmavoice_decode_init(AVCodecContext *ctx)
s->spillover_bitsize = 3 + av_ceil_log2(ctx->block_align); s->spillover_bitsize = 3 + av_ceil_log2(ctx->block_align);
s->do_apf = flags & 0x1; s->do_apf = flags & 0x1;
if (s->do_apf) { if (s->do_apf) {
ff_rdft_init(&s->rdft, 7, DFT_R2C);
ff_rdft_init(&s->irdft, 7, IDFT_C2R);
ff_dct_init(&s->dct, 6, DCT_I);
ff_dct_init(&s->dst, 6, DST_I);
if ((ret = ff_rdft_init(&s->rdft, 7, DFT_R2C)) < 0 ||
(ret = ff_rdft_init(&s->irdft, 7, IDFT_C2R)) < 0 ||
(ret = ff_dct_init (&s->dct, 6, DCT_I)) < 0 ||
(ret = ff_dct_init (&s->dst, 6, DST_I)) < 0)
return ret;


ff_sine_window_init(s->cos, 256); ff_sine_window_init(s->cos, 256);
memcpy(&s->sin[255], s->cos, 256 * sizeof(s->cos[0])); memcpy(&s->sin[255], s->cos, 256 * sizeof(s->cos[0]));


Loading…
Cancel
Save