[FFmpeg-devel] [PATCH v2 1/1] return value check for init_get_bits in wmadec.c
maryam ebrahimzadeh
me22bee at outlook.com
Thu Aug 12 08:50:01 EEST 2021
sorry for my mistake.
previous version faild to make.
---
libavcodec/sipr.c | 5 +++--
libavcodec/truemotion2.c | 12 +++++++++---
libavcodec/utvideodec.c | 8 ++++++--
libavcodec/vaapi_mpeg2.c | 5 ++++-
libavcodec/vble.c | 5 +++--
libavcodec/vc1dec.c | 8 ++++++--
libavcodec/vorbisdec.c | 8 ++++++--
libavcodec/vp6.c | 4 +++-
libavcodec/wmadec.c | 1 -
9 files changed, 40 insertions(+), 16 deletions(-)
diff --git a/libavcodec/sipr.c b/libavcodec/sipr.c
index a792b22c9f..362b475bea 100644
--- a/libavcodec/sipr.c
+++ b/libavcodec/sipr.c
@@ -547,8 +547,9 @@ static int sipr_decode_frame(AVCodecContext *avctx, void *data,
return ret;
samples = (float *)frame->data[0];
- init_get_bits(&gb, buf, mode_par->bits_per_frame);
-
+ ret = init_get_bits8(&gb, buf, (mode_par->bits_per_frame)/8);
+ if (ret < 0)
+ return ret;
for (i = 0; i < mode_par->frames_per_packet; i++) {
decode_parameters(&parm, &gb, mode_par);
diff --git a/libavcodec/truemotion2.c b/libavcodec/truemotion2.c
index f29db593f9..f6fedc22d4 100644
--- a/libavcodec/truemotion2.c
+++ b/libavcodec/truemotion2.c
@@ -317,7 +317,9 @@ static int tm2_read_stream(TM2Context *ctx, const uint8_t *buf, int stream_id, i
pos = bytestream2_tell(&gb);
if (skip <= pos)
return AVERROR_INVALIDDATA;
- init_get_bits(&ctx->gb, buf + pos, (skip - pos) * 8);
+ ret = init_get_bits8(&ctx->gb, buf + pos, (skip - pos));
+ if (ret < 0)
+ return ret;
if ((ret = tm2_read_deltas(ctx, stream_id)) < 0)
return ret;
bytestream2_skip(&gb, ((get_bits_count(&ctx->gb) + 31) >> 5) << 2);
@@ -334,7 +336,9 @@ static int tm2_read_stream(TM2Context *ctx, const uint8_t *buf, int stream_id, i
pos = bytestream2_tell(&gb);
if (skip <= pos)
return AVERROR_INVALIDDATA;
- init_get_bits(&ctx->gb, buf + pos, (skip - pos) * 8);
+ ret = init_get_bits8(&ctx->gb, buf + pos, (skip - pos));
+ if (ret < 0)
+ return ret;
if ((ret = tm2_build_huff_table(ctx, &codes)) < 0)
return ret;
bytestream2_skip(&gb, ((get_bits_count(&ctx->gb) + 31) >> 5) << 2);
@@ -359,7 +363,9 @@ static int tm2_read_stream(TM2Context *ctx, const uint8_t *buf, int stream_id, i
ret = AVERROR_INVALIDDATA;
goto end;
}
- init_get_bits(&ctx->gb, buf + pos, (skip - pos) * 8);
+ init_get_bits8(&ctx->gb, buf + pos, (skip - pos));
+ if (ret < 0)
+ return ret;
for (i = 0; i < toks; i++) {
if (get_bits_left(&ctx->gb) <= 0) {
av_log(ctx->avctx, AV_LOG_ERROR, "Incorrect number of tokens: %i\n", toks);
diff --git a/libavcodec/utvideodec.c b/libavcodec/utvideodec.c
index b39d8a7948..144992ff0d 100644
--- a/libavcodec/utvideodec.c
+++ b/libavcodec/utvideodec.c
@@ -153,7 +153,9 @@ static int decode_plane10(UtvideoContext *c, int plane_no,
c->bdsp.bswap_buf((uint32_t *) c->slice_bits,
(uint32_t *)(src + slice_data_start + c->slices * 4),
(slice_data_end - slice_data_start + 3) >> 2);
- init_get_bits(&gb, c->slice_bits, slice_size * 8);
+ ret = init_get_bits8(&gb, c->slice_bits, slice_size);
+ if (ret < 0)
+ return ret;
prev = 0x200;
for (j = sstart; j < send; j++) {
@@ -314,7 +316,9 @@ static int decode_plane(UtvideoContext *c, int plane_no,
c->bdsp.bswap_buf((uint32_t *) c->slice_bits,
(uint32_t *)(src + slice_data_start + c->slices * 4),
(slice_data_end - slice_data_start + 3) >> 2);
- init_get_bits(&gb, c->slice_bits, slice_size * 8);
+ ret = init_get_bits8(&gb, c->slice_bits, slice_size);
+ if (ret < 0)
+ return ret;
prev = 0x80;
for (j = sstart; j < send; j++) {
diff --git a/libavcodec/vaapi_mpeg2.c b/libavcodec/vaapi_mpeg2.c
index 26e0cd827c..8e3903212a 100644
--- a/libavcodec/vaapi_mpeg2.c
+++ b/libavcodec/vaapi_mpeg2.c
@@ -136,9 +136,12 @@ static int vaapi_mpeg2_decode_slice(AVCodecContext *avctx, const uint8_t *buffer
GetBitContext gb;
uint32_t quantiser_scale_code, intra_slice_flag, macroblock_offset;
int err;
+ int ret;
/* Determine macroblock_offset */
- init_get_bits(&gb, buffer, 8 * size);
+ ret = init_get_bits8(&gb, buffer, size);
+ if (ret < 0 )
+ return ret;
if (get_bits_long(&gb, 32) >> 8 != 1) /* start code */
return AVERROR_INVALIDDATA;
quantiser_scale_code = get_bits(&gb, 5);
diff --git a/libavcodec/vble.c b/libavcodec/vble.c
index f1400959e0..d3e1804c7b 100644
--- a/libavcodec/vble.c
+++ b/libavcodec/vble.c
@@ -146,8 +146,9 @@ static int vble_decode_frame(AVCodecContext *avctx, void *data, int *got_frame,
if (version != 1)
av_log(avctx, AV_LOG_WARNING, "Unsupported VBLE Version: %d\n", version);
- init_get_bits(&gb, src + 4, (avpkt->size - 4) * 8);
-
+ ret = init_get_bits8(&gb, src + 4, (avpkt->size - 4) );
+ if (ret < 0)
+ return ret;
/* Unpack */
if (vble_unpack(ctx, &gb) < 0) {
av_log(avctx, AV_LOG_ERROR, "Invalid Code\n");
diff --git a/libavcodec/vc1dec.c b/libavcodec/vc1dec.c
index 1fb1950ade..07d60294f2 100644
--- a/libavcodec/vc1dec.c
+++ b/libavcodec/vc1dec.c
@@ -444,7 +444,9 @@ static av_cold int vc1_decode_init(AVCodecContext *avctx)
// the last byte of the extradata is a version number, 1 for the
// samples we can decode
- init_get_bits(&gb, avctx->extradata, avctx->extradata_size*8);
+ ret = init_get_bits8(&gb, avctx->extradata, avctx->extradata_size);
+ if (ret < 0)
+ return ret;
if ((ret = ff_vc1_decode_sequence_header(avctx, v, &gb)) < 0)
return ret;
@@ -771,7 +773,9 @@ static int vc1_decode_frame(AVCodecContext *avctx, void *data,
}
init_get_bits(&s->gb, buf2, buf_size2*8);
} else
- init_get_bits(&s->gb, buf, buf_size*8);
+ ret = init_get_bits8(&s->gb, buf, buf_size);
+ if (ret < 0)
+ return ret;
if (v->res_sprite) {
v->new_sprite = !get_bits1(&s->gb);
diff --git a/libavcodec/vorbisdec.c b/libavcodec/vorbisdec.c
index dac2b6841c..80358f6359 100644
--- a/libavcodec/vorbisdec.c
+++ b/libavcodec/vorbisdec.c
@@ -1052,7 +1052,9 @@ static av_cold int vorbis_decode_init(AVCodecContext *avctx)
return ret;
}
- init_get_bits(gb, header_start[0], header_len[0]*8);
+ ret = init_get_bits8(gb, header_start[0], header_len[0]);
+ if (ret < 0)
+ return ret;
hdr_type = get_bits(gb, 8);
if (hdr_type != 1) {
av_log(avctx, AV_LOG_ERROR, "First header is not the id header.\n");
@@ -1064,7 +1066,9 @@ static av_cold int vorbis_decode_init(AVCodecContext *avctx)
return ret;
}
- init_get_bits(gb, header_start[2], header_len[2]*8);
+ ret = init_get_bits8(gb, header_start[2], header_len[2]);
+ if (ret < 0)
+ return ret;
hdr_type = get_bits(gb, 8);
if (hdr_type != 5) {
av_log(avctx, AV_LOG_ERROR, "Third header is not the setup header.\n");
diff --git a/libavcodec/vp6.c b/libavcodec/vp6.c
index 73822a00f9..149daa59f3 100644
--- a/libavcodec/vp6.c
+++ b/libavcodec/vp6.c
@@ -167,7 +167,9 @@ static int vp6_parse_header(VP56Context *s, const uint8_t *buf, int buf_size)
}
if (s->use_huffman) {
s->parse_coeff = vp6_parse_coeff_huffman;
- init_get_bits(&s->gb, buf, buf_size<<3);
+ ret = init_get_bits8(&s->gb, buf, (buf_size<<3)/8);
+ if (ret < 0)
+ return ret;
} else {
ret = ff_vp56_init_range_decoder(&s->cc, buf, buf_size);
if (ret < 0)
diff --git a/libavcodec/wmadec.c b/libavcodec/wmadec.c
index 6ac6221d11..0bbc685c89 100644
--- a/libavcodec/wmadec.c
+++ b/libavcodec/wmadec.c
@@ -822,7 +822,6 @@ static int wma_decode_superframe(AVCodecContext *avctx, void *data,
uint8_t *q;
float **samples;
int samples_offset;
- int ret;
ff_tlog(avctx, "***decode_superframe:\n");
--
2.17.1
More information about the ffmpeg-devel
mailing list