truehd_core: Return error in case of error

Several checks (e.g. when the size of the input packet is too small)
simply used "goto fail", but didn't set the return value appropriately
for an error.

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
pull/316/head
Andreas Rheinhardt 6 years ago committed by Paul B Mahol
parent cbe23e40ae
commit 610460a397
  1. 14
      libavcodec/truehd_core_bsf.c

@ -53,8 +53,10 @@ static int truehd_core_filter(AVBSFContext *ctx, AVPacket *out)
if (ret < 0) if (ret < 0)
return ret; return ret;
if (in->size < 4) if (in->size < 4) {
ret = AVERROR_INVALIDDATA;
goto fail; goto fail;
}
ret = init_get_bits(&gbc, in->data, 32); ret = init_get_bits(&gbc, in->data, 32);
if (ret < 0) if (ret < 0)
@ -62,8 +64,10 @@ static int truehd_core_filter(AVBSFContext *ctx, AVPacket *out)
skip_bits(&gbc, 4); skip_bits(&gbc, 4);
in_size = get_bits(&gbc, 12) * 2; in_size = get_bits(&gbc, 12) * 2;
if (in_size < 4 || in_size > in->size) if (in_size < 4 || in_size > in->size) {
ret = AVERROR_INVALIDDATA;
goto fail; goto fail;
}
out_size = in_size; out_size = in_size;
dts = get_bits(&gbc, 16); dts = get_bits(&gbc, 16);
@ -73,13 +77,15 @@ static int truehd_core_filter(AVBSFContext *ctx, AVPacket *out)
goto fail; goto fail;
if (show_bits_long(&gbc, 32) == 0xf8726fba) { if (show_bits_long(&gbc, 32) == 0xf8726fba) {
if ((ret = ff_mlp_read_major_sync(ctx, &s->hdr, &gbc)) != 0) if ((ret = ff_mlp_read_major_sync(ctx, &s->hdr, &gbc)) < 0)
goto fail; goto fail;
have_header = 1; have_header = 1;
} }
if (s->hdr.num_substreams > MAX_SUBSTREAMS) if (s->hdr.num_substreams > MAX_SUBSTREAMS) {
ret = AVERROR_INVALIDDATA;
goto fail; goto fail;
}
for (i = 0; i < s->hdr.num_substreams; i++) { for (i = 0; i < s->hdr.num_substreams; i++) {
for (int j = 0; j < 4; j++) for (int j = 0; j < 4; j++)

Loading…
Cancel
Save