X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=libavcodec%2Fbintext.c;h=d85f2c2dd443504d8d51f32ec36e59b5f622c4a0;hb=420ab946ace27e4b4bfb6c2be0a65a4ffd6e05a1;hp=d967317671b89a008b98b7d065851d20531592a3;hpb=706d2c66e8e59cfda32e57713bc37e5558a25815;p=ffmpeg diff --git a/libavcodec/bintext.c b/libavcodec/bintext.c index d967317671b..d85f2c2dd44 100644 --- a/libavcodec/bintext.c +++ b/libavcodec/bintext.c @@ -96,11 +96,6 @@ static av_cold int decode_init(AVCodecContext *avctx) if (avctx->width < FONT_WIDTH || avctx->height < s->font_height) return AVERROR_INVALIDDATA; - - s->frame = av_frame_alloc(); - if (!s->frame) - return AVERROR(ENOMEM); - return 0; } @@ -146,8 +141,12 @@ static int decode_frame(AVCodecContext *avctx, const uint8_t *buf_end = buf+buf_size; int ret; + if ((avctx->width / FONT_WIDTH) * (avctx->height / s->font_height) / 256 > buf_size) + return AVERROR_INVALIDDATA; + + s->frame = data; s->x = s->y = 0; - if ((ret = ff_reget_buffer(avctx, s->frame)) < 0) + if ((ret = ff_get_buffer(avctx, s->frame, 0)) < 0) return ret; s->frame->pict_type = AV_PICTURE_TYPE_I; s->frame->palette_has_changed = 1; @@ -205,21 +204,10 @@ static int decode_frame(AVCodecContext *avctx, } } - if ((ret = av_frame_ref(data, s->frame)) < 0) - return ret; *got_frame = 1; return buf_size; } -static av_cold int decode_end(AVCodecContext *avctx) -{ - XbinContext *s = avctx->priv_data; - - av_frame_free(&s->frame); - - return 0; -} - #if CONFIG_BINTEXT_DECODER AVCodec ff_bintext_decoder = { .name = "bintext", @@ -228,7 +216,6 @@ AVCodec ff_bintext_decoder = { .id = AV_CODEC_ID_BINTEXT, .priv_data_size = sizeof(XbinContext), .init = decode_init, - .close = decode_end, .decode = decode_frame, .capabilities = AV_CODEC_CAP_DR1, }; @@ -241,7 +228,6 @@ AVCodec ff_xbin_decoder = { .id = AV_CODEC_ID_XBIN, .priv_data_size = sizeof(XbinContext), .init = decode_init, - .close = decode_end, .decode = decode_frame, .capabilities = AV_CODEC_CAP_DR1, }; @@ -254,7 +240,6 @@ AVCodec ff_idf_decoder = { .id = AV_CODEC_ID_IDF, .priv_data_size = sizeof(XbinContext), .init = decode_init, - .close = decode_end, .decode = decode_frame, .capabilities = AV_CODEC_CAP_DR1, };