diff --git a/libavformat/microdvddec.c b/libavformat/microdvddec.c index ca9086afe9..08e6fca09c 100644 --- a/libavformat/microdvddec.c +++ b/libavformat/microdvddec.c @@ -117,10 +117,11 @@ static int microdvd_read_header(AVFormatContext *s) continue; } if (!st->codecpar->extradata && sscanf(line, "{DEFAULT}{}%c", &c) == 1) { - st->codecpar->extradata = av_strdup(line + 11); - if (!st->codecpar->extradata) - return AVERROR(ENOMEM); - st->codecpar->extradata_size = strlen(st->codecpar->extradata) + 1; + int ret, size = strlen(line + 11); + ret = ff_alloc_extradata(st->codecpar, size); + if (ret < 0) + return ret; + memcpy(st->codecpar->extradata, line + 11, size); continue; } } diff --git a/libavformat/microdvdenc.c b/libavformat/microdvdenc.c index 04f475b645..6639651e02 100644 --- a/libavformat/microdvdenc.c +++ b/libavformat/microdvdenc.c @@ -36,6 +36,7 @@ static int microdvd_write_header(struct AVFormatContext *s) if (par->extradata && par->extradata_size > 0) { avio_write(s->pb, "{DEFAULT}{}", 11); avio_write(s->pb, par->extradata, par->extradata_size); + avio_w8(s->pb, '\n'); avio_flush(s->pb); } diff --git a/tests/ref/fate/sub-microdvd-remux b/tests/ref/fate/sub-microdvd-remux index a71da99031..92ff233f56 100644 Binary files a/tests/ref/fate/sub-microdvd-remux and b/tests/ref/fate/sub-microdvd-remux differ