aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndreas Rheinhardt <andreas.rheinhardt@outlook.com>2021-11-30 09:24:51 +0100
committerAndreas Rheinhardt <andreas.rheinhardt@outlook.com>2021-12-02 07:28:35 +0100
commit0b934f8f17c19be6b73cc5ecc9a23f7451bee5d0 (patch)
tree2cdb9c51a3373b84e0d9de8e233cd37d87dbd793
parentbb89a2f64fd1d74cc51af62d5ef133be274dd7af (diff)
downloadffmpeg-0b934f8f17c19be6b73cc5ecc9a23f7451bee5d0.tar.gz
avcodec/movtextenc: Reset AVBPrint at the beginning, not end of encoding
This avoids abusing a variable called length for the return value and ensures that the AVBPrint is always reset before using it; previously this has been forgotten in some error paths. Reviewed-by: Philip Langdale <philipl@overt.org> Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
-rw-r--r--libavcodec/movtextenc.c18
1 files changed, 6 insertions, 12 deletions
diff --git a/libavcodec/movtextenc.c b/libavcodec/movtextenc.c
index 0632463a63..46109e0a5e 100644
--- a/libavcodec/movtextenc.c
+++ b/libavcodec/movtextenc.c
@@ -646,6 +646,7 @@ static int mov_text_encode_frame(AVCodecContext *avctx, unsigned char *buf,
s->text_pos = 0;
s->count = 0;
s->box_flags = 0;
+ av_bprint_clear(&s->buffer);
for (i = 0; i < sub->num_rects; i++) {
const char *ass = sub->rects[i]->ass;
@@ -669,27 +670,20 @@ static int mov_text_encode_frame(AVCodecContext *avctx, unsigned char *buf,
AV_WB16(buf, s->byte_count);
buf += 2;
- if (!av_bprint_is_complete(&s->buffer)) {
- length = AVERROR(ENOMEM);
- goto exit;
- }
+ if (!av_bprint_is_complete(&s->buffer))
+ return AVERROR(ENOMEM);
- if (!s->buffer.len) {
- length = 0;
- goto exit;
- }
+ if (!s->buffer.len)
+ return 0;
if (s->buffer.len > bufsize - 3) {
av_log(avctx, AV_LOG_ERROR, "Buffer too small for ASS event.\n");
- length = AVERROR_BUFFER_TOO_SMALL;
- goto exit;
+ return AVERROR_BUFFER_TOO_SMALL;
}
memcpy(buf, s->buffer.str, s->buffer.len);
length = s->buffer.len + 2;
-exit:
- av_bprint_clear(&s->buffer);
return length;
}