diff options
author | rcombs <rcombs@rcombs.me> | 2023-03-08 15:33:24 -0600 |
---|---|---|
committer | rcombs <rcombs@rcombs.me> | 2023-03-21 14:24:31 -0400 |
commit | c0d9327a63db2b7f15783b59488a480e5d9d6d56 (patch) | |
tree | ab4325e949701a5274f9969cc330f62b34f65fb1 | |
parent | b68a6ba469daae89fcf651d5ec44cc1821a014e4 (diff) | |
download | ffmpeg-c0d9327a63db2b7f15783b59488a480e5d9d6d56.tar.gz |
lavc/ass: error if not passed exactly 1 rect
This never produced valid output.
-rw-r--r-- | libavcodec/assenc.c | 29 |
1 files changed, 14 insertions, 15 deletions
diff --git a/libavcodec/assenc.c b/libavcodec/assenc.c index db6fd25dd7..e548b9fd3b 100644 --- a/libavcodec/assenc.c +++ b/libavcodec/assenc.c @@ -45,27 +45,26 @@ static int ass_encode_frame(AVCodecContext *avctx, unsigned char *buf, int bufsize, const AVSubtitle *sub) { - int i, len, total_len = 0; + int len; - for (i=0; i<sub->num_rects; i++) { - const char *ass = sub->rects[i]->ass; - - if (sub->rects[i]->type != SUBTITLE_ASS) { - av_log(avctx, AV_LOG_ERROR, "Only SUBTITLE_ASS type supported.\n"); - return AVERROR(EINVAL); - } + if (sub->num_rects != 1) { + av_log(avctx, AV_LOG_ERROR, "Only one rect per AVSubtitle is supported in ASS.\n"); + return AVERROR_INVALIDDATA; + } - len = av_strlcpy(buf+total_len, ass, bufsize-total_len); + if (sub->rects[0]->type != SUBTITLE_ASS) { + av_log(avctx, AV_LOG_ERROR, "Only SUBTITLE_ASS type supported.\n"); + return AVERROR(EINVAL); + } - if (len > bufsize-total_len-1) { - av_log(avctx, AV_LOG_ERROR, "Buffer too small for ASS event.\n"); - return AVERROR_BUFFER_TOO_SMALL; - } + len = av_strlcpy(buf, sub->rects[0]->ass, bufsize); - total_len += len; + if (len > bufsize - 1) { + av_log(avctx, AV_LOG_ERROR, "Buffer too small for ASS event.\n"); + return AVERROR_BUFFER_TOO_SMALL; } - return total_len; + return len; } #if CONFIG_SSA_ENCODER |