Commit f95c81ce authored by Philip Langdale's avatar Philip Langdale

avcodec/movtextenc: Ignore unmatched closing style tags

The existing code will segfault if a closing tag shows up when there
was never an opening tag. This isn't a well formed style, but it's also
not a reason to crash.

Fixes: https://trac.ffmpeg.org/ticket/6303
parent 6ba1c9bf
...@@ -57,6 +57,8 @@ typedef struct { ...@@ -57,6 +57,8 @@ typedef struct {
} HilightcolorBox; } HilightcolorBox;
typedef struct { typedef struct {
AVCodecContext *avctx;
ASSSplitContext *ass_ctx; ASSSplitContext *ass_ctx;
AVBPrint buffer; AVBPrint buffer;
StyleBox **style_attributes; StyleBox **style_attributes;
...@@ -187,6 +189,7 @@ static av_cold int mov_text_encode_init(AVCodecContext *avctx) ...@@ -187,6 +189,7 @@ static av_cold int mov_text_encode_init(AVCodecContext *avctx)
}; };
MovTextContext *s = avctx->priv_data; MovTextContext *s = avctx->priv_data;
s->avctx = avctx;
avctx->extradata_size = sizeof text_sample_entry; avctx->extradata_size = sizeof text_sample_entry;
avctx->extradata = av_mallocz(avctx->extradata_size + AV_INPUT_BUFFER_PADDING_SIZE); avctx->extradata = av_mallocz(avctx->extradata_size + AV_INPUT_BUFFER_PADDING_SIZE);
...@@ -247,6 +250,9 @@ static void mov_text_style_cb(void *priv, const char style, int close) ...@@ -247,6 +250,9 @@ static void mov_text_style_cb(void *priv, const char style, int close)
s->style_attributes_temp->style_flag |= STYLE_FLAG_UNDERLINE; s->style_attributes_temp->style_flag |= STYLE_FLAG_UNDERLINE;
break; break;
} }
} else if (!s->style_attributes_temp) {
av_log(s->avctx, AV_LOG_WARNING, "Ignoring unmatched close tag\n");
return;
} else { } else {
s->style_attributes_temp->style_end = AV_RB16(&s->text_pos); s->style_attributes_temp->style_end = AV_RB16(&s->text_pos);
av_dynarray_add(&s->style_attributes, &s->count, s->style_attributes_temp); av_dynarray_add(&s->style_attributes, &s->count, s->style_attributes_temp);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment