[FFmpeg-devel] [PATCH 3/8] avcodec/decode: Check size before opening iconv
James Almer
jamrial at gmail.com
Thu Mar 4 19:19:37 EET 2021
On 3/4/2021 12:42 PM, Andreas Rheinhardt wrote:
> Avoids closing iconv when the size check fails.
>
> Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt at gmail.com>
> ---
> libavcodec/decode.c | 9 ++++-----
> 1 file changed, 4 insertions(+), 5 deletions(-)
>
> diff --git a/libavcodec/decode.c b/libavcodec/decode.c
> index db6ee9cb04..c976795311 100644
> --- a/libavcodec/decode.c
> +++ b/libavcodec/decode.c
> @@ -884,18 +884,17 @@ static int recode_subtitle(AVCodecContext *avctx,
> return 0;
>
> #if CONFIG_ICONV
> - cd = iconv_open("UTF-8", avctx->sub_charenc);
> - av_assert0(cd != (iconv_t)-1);
> -
> inb = inpkt->data;
> inl = inpkt->size;
>
> if (inl >= INT_MAX / UTF8_MAX_BYTES - AV_INPUT_BUFFER_PADDING_SIZE) {
> av_log(avctx, AV_LOG_ERROR, "Subtitles packet is too big for recoding\n");
> - ret = AVERROR(ENOMEM);
> - goto end;
> + return AVERROR(ERANGE);
> }
>
> + cd = iconv_open("UTF-8", avctx->sub_charenc);
> + av_assert0(cd != (iconv_t)-1);
Unrelated to this patch, but I don't think we should assert an external
library return value. Asserts should be used to detect internal bugs,
stuff we have control over, and we have no control over the behavior of
iconv_open().
So this should be changed into a normal check, and return
AVERROR_EXTERNAL on failure.
> +
> ret = av_new_packet(&tmp, inl * UTF8_MAX_BYTES);
> if (ret < 0)
> goto end;
>
LGTM.
More information about the ffmpeg-devel
mailing list