Message ID | 20190925172107.885-1-jamrial@gmail.com |
---|---|
State | Accepted |
Commit | 58aa0ed8f10753ee90f4a4a1f4f3da803cf7c145 |
Headers | show |
On Wed, Sep 25, 2019 at 10:30 AM James Almer <jamrial@gmail.com> wrote: > Fixes ticket #8183. > > Signed-off-by: James Almer <jamrial@gmail.com> > --- > libavformat/movenc.c | 15 ++++++++++----- > 1 file changed, 10 insertions(+), 5 deletions(-) > > diff --git a/libavformat/movenc.c b/libavformat/movenc.c > index c824ff5ba1..e3283871d0 100644 > --- a/libavformat/movenc.c > +++ b/libavformat/movenc.c > @@ -5377,12 +5377,13 @@ int ff_mov_write_packet(AVFormatContext *s, > AVPacket *pkt) > !TAG_IS_AVCI(trk->tag) && > (par->codec_id != AV_CODEC_ID_DNXHD)) { > trk->vos_len = par->extradata_size; > - trk->vos_data = av_malloc(trk->vos_len); > + trk->vos_data = av_malloc(trk->vos_len + > AV_INPUT_BUFFER_PADDING_SIZE); > if (!trk->vos_data) { > ret = AVERROR(ENOMEM); > goto err; > } > memcpy(trk->vos_data, par->extradata, trk->vos_len); > + memset(trk->vos_data + trk->vos_len, 0, > AV_INPUT_BUFFER_PADDING_SIZE); > } > > if (par->codec_id == AV_CODEC_ID_AAC && pkt->size > 2 && > @@ -5460,12 +5461,13 @@ int ff_mov_write_packet(AVFormatContext *s, > AVPacket *pkt) > par->codec_id == AV_CODEC_ID_AC3) && !trk->vos_len) { > /* copy frame to create needed atoms */ > trk->vos_len = size; > - trk->vos_data = av_malloc(size); > + trk->vos_data = av_malloc(size + AV_INPUT_BUFFER_PADDING_SIZE); > if (!trk->vos_data) { > ret = AVERROR(ENOMEM); > goto err; > } > memcpy(trk->vos_data, pkt->data, size); > + memset(trk->vos_data + size, 0, AV_INPUT_BUFFER_PADDING_SIZE); > } > > if (trk->entry >= trk->cluster_capacity) { > @@ -6090,12 +6092,13 @@ static int > mov_create_dvd_sub_decoder_specific_info(MOVTrack *track, > cur += strspn(cur, "\n\r"); > } > if (have_palette) { > - track->vos_data = av_malloc(16*4); > + track->vos_data = av_malloc(16*4 + AV_INPUT_BUFFER_PADDING_SIZE); > if (!track->vos_data) > return AVERROR(ENOMEM); > for (i = 0; i < 16; i++) { > AV_WB32(track->vos_data + i * 4, palette[i]); > } > + memset(track->vos_data + 16*4, 0, AV_INPUT_BUFFER_PADDING_SIZE); > track->vos_len = 16 * 4; > } > st->codecpar->width = width; > @@ -6453,11 +6456,12 @@ static int mov_write_header(AVFormatContext *s) > mov_create_dvd_sub_decoder_specific_info(track, st); > else if (!TAG_IS_AVCI(track->tag) && st->codecpar->codec_id > != AV_CODEC_ID_DNXHD) { > track->vos_len = st->codecpar->extradata_size; > - track->vos_data = av_malloc(track->vos_len); > + track->vos_data = av_malloc(track->vos_len + > AV_INPUT_BUFFER_PADDING_SIZE); > if (!track->vos_data) { > return AVERROR(ENOMEM); > } > memcpy(track->vos_data, st->codecpar->extradata, > track->vos_len); > + memset(track->vos_data + track->vos_len, 0, > AV_INPUT_BUFFER_PADDING_SIZE); > } > } > > @@ -6713,10 +6717,11 @@ static int mov_write_trailer(AVFormatContext *s) > AVCodecParameters *par = track->par; > > track->vos_len = par->extradata_size; > - track->vos_data = av_malloc(track->vos_len); > + track->vos_data = av_malloc(track->vos_len + > AV_INPUT_BUFFER_PADDING_SIZE); > if (!track->vos_data) > return AVERROR(ENOMEM); > memcpy(track->vos_data, par->extradata, track->vos_len); > + memset(track->vos_data + track->vos_len, 0, > AV_INPUT_BUFFER_PADDING_SIZE); > } > mov->need_rewrite_extradata = 0; > } > -- > 2.22.0 > > I confirm that this patch fixes the issue i have here as well. > _______________________________________________ > ffmpeg-devel mailing list > ffmpeg-devel@ffmpeg.org > https://ffmpeg.org/mailman/listinfo/ffmpeg-devel > > To unsubscribe, visit link above, or email > ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".
On 9/26/2019 3:04 PM, Thierry Foucu wrote: > On Wed, Sep 25, 2019 at 10:30 AM James Almer <jamrial@gmail.com> wrote: > >> Fixes ticket #8183. >> >> Signed-off-by: James Almer <jamrial@gmail.com> >> --- >> libavformat/movenc.c | 15 ++++++++++----- >> 1 file changed, 10 insertions(+), 5 deletions(-) >> >> diff --git a/libavformat/movenc.c b/libavformat/movenc.c >> index c824ff5ba1..e3283871d0 100644 >> --- a/libavformat/movenc.c >> +++ b/libavformat/movenc.c >> @@ -5377,12 +5377,13 @@ int ff_mov_write_packet(AVFormatContext *s, >> AVPacket *pkt) >> !TAG_IS_AVCI(trk->tag) && >> (par->codec_id != AV_CODEC_ID_DNXHD)) { >> trk->vos_len = par->extradata_size; >> - trk->vos_data = av_malloc(trk->vos_len); >> + trk->vos_data = av_malloc(trk->vos_len + >> AV_INPUT_BUFFER_PADDING_SIZE); >> if (!trk->vos_data) { >> ret = AVERROR(ENOMEM); >> goto err; >> } >> memcpy(trk->vos_data, par->extradata, trk->vos_len); >> + memset(trk->vos_data + trk->vos_len, 0, >> AV_INPUT_BUFFER_PADDING_SIZE); >> } >> >> if (par->codec_id == AV_CODEC_ID_AAC && pkt->size > 2 && >> @@ -5460,12 +5461,13 @@ int ff_mov_write_packet(AVFormatContext *s, >> AVPacket *pkt) >> par->codec_id == AV_CODEC_ID_AC3) && !trk->vos_len) { >> /* copy frame to create needed atoms */ >> trk->vos_len = size; >> - trk->vos_data = av_malloc(size); >> + trk->vos_data = av_malloc(size + AV_INPUT_BUFFER_PADDING_SIZE); >> if (!trk->vos_data) { >> ret = AVERROR(ENOMEM); >> goto err; >> } >> memcpy(trk->vos_data, pkt->data, size); >> + memset(trk->vos_data + size, 0, AV_INPUT_BUFFER_PADDING_SIZE); >> } >> >> if (trk->entry >= trk->cluster_capacity) { >> @@ -6090,12 +6092,13 @@ static int >> mov_create_dvd_sub_decoder_specific_info(MOVTrack *track, >> cur += strspn(cur, "\n\r"); >> } >> if (have_palette) { >> - track->vos_data = av_malloc(16*4); >> + track->vos_data = av_malloc(16*4 + AV_INPUT_BUFFER_PADDING_SIZE); >> if (!track->vos_data) >> return AVERROR(ENOMEM); >> for (i = 0; i < 16; i++) { >> AV_WB32(track->vos_data + i * 4, palette[i]); >> } >> + memset(track->vos_data + 16*4, 0, AV_INPUT_BUFFER_PADDING_SIZE); >> track->vos_len = 16 * 4; >> } >> st->codecpar->width = width; >> @@ -6453,11 +6456,12 @@ static int mov_write_header(AVFormatContext *s) >> mov_create_dvd_sub_decoder_specific_info(track, st); >> else if (!TAG_IS_AVCI(track->tag) && st->codecpar->codec_id >> != AV_CODEC_ID_DNXHD) { >> track->vos_len = st->codecpar->extradata_size; >> - track->vos_data = av_malloc(track->vos_len); >> + track->vos_data = av_malloc(track->vos_len + >> AV_INPUT_BUFFER_PADDING_SIZE); >> if (!track->vos_data) { >> return AVERROR(ENOMEM); >> } >> memcpy(track->vos_data, st->codecpar->extradata, >> track->vos_len); >> + memset(track->vos_data + track->vos_len, 0, >> AV_INPUT_BUFFER_PADDING_SIZE); >> } >> } >> >> @@ -6713,10 +6717,11 @@ static int mov_write_trailer(AVFormatContext *s) >> AVCodecParameters *par = track->par; >> >> track->vos_len = par->extradata_size; >> - track->vos_data = av_malloc(track->vos_len); >> + track->vos_data = av_malloc(track->vos_len + >> AV_INPUT_BUFFER_PADDING_SIZE); >> if (!track->vos_data) >> return AVERROR(ENOMEM); >> memcpy(track->vos_data, par->extradata, track->vos_len); >> + memset(track->vos_data + track->vos_len, 0, >> AV_INPUT_BUFFER_PADDING_SIZE); >> } >> mov->need_rewrite_extradata = 0; >> } >> -- >> 2.22.0 >> >> > I confirm that this patch fixes the issue i have here as well. Applied, thanks.
diff --git a/libavformat/movenc.c b/libavformat/movenc.c index c824ff5ba1..e3283871d0 100644 --- a/libavformat/movenc.c +++ b/libavformat/movenc.c @@ -5377,12 +5377,13 @@ int ff_mov_write_packet(AVFormatContext *s, AVPacket *pkt) !TAG_IS_AVCI(trk->tag) && (par->codec_id != AV_CODEC_ID_DNXHD)) { trk->vos_len = par->extradata_size; - trk->vos_data = av_malloc(trk->vos_len); + trk->vos_data = av_malloc(trk->vos_len + AV_INPUT_BUFFER_PADDING_SIZE); if (!trk->vos_data) { ret = AVERROR(ENOMEM); goto err; } memcpy(trk->vos_data, par->extradata, trk->vos_len); + memset(trk->vos_data + trk->vos_len, 0, AV_INPUT_BUFFER_PADDING_SIZE); } if (par->codec_id == AV_CODEC_ID_AAC && pkt->size > 2 && @@ -5460,12 +5461,13 @@ int ff_mov_write_packet(AVFormatContext *s, AVPacket *pkt) par->codec_id == AV_CODEC_ID_AC3) && !trk->vos_len) { /* copy frame to create needed atoms */ trk->vos_len = size; - trk->vos_data = av_malloc(size); + trk->vos_data = av_malloc(size + AV_INPUT_BUFFER_PADDING_SIZE); if (!trk->vos_data) { ret = AVERROR(ENOMEM); goto err; } memcpy(trk->vos_data, pkt->data, size); + memset(trk->vos_data + size, 0, AV_INPUT_BUFFER_PADDING_SIZE); } if (trk->entry >= trk->cluster_capacity) { @@ -6090,12 +6092,13 @@ static int mov_create_dvd_sub_decoder_specific_info(MOVTrack *track, cur += strspn(cur, "\n\r"); } if (have_palette) { - track->vos_data = av_malloc(16*4); + track->vos_data = av_malloc(16*4 + AV_INPUT_BUFFER_PADDING_SIZE); if (!track->vos_data) return AVERROR(ENOMEM); for (i = 0; i < 16; i++) { AV_WB32(track->vos_data + i * 4, palette[i]); } + memset(track->vos_data + 16*4, 0, AV_INPUT_BUFFER_PADDING_SIZE); track->vos_len = 16 * 4; } st->codecpar->width = width; @@ -6453,11 +6456,12 @@ static int mov_write_header(AVFormatContext *s) mov_create_dvd_sub_decoder_specific_info(track, st); else if (!TAG_IS_AVCI(track->tag) && st->codecpar->codec_id != AV_CODEC_ID_DNXHD) { track->vos_len = st->codecpar->extradata_size; - track->vos_data = av_malloc(track->vos_len); + track->vos_data = av_malloc(track->vos_len + AV_INPUT_BUFFER_PADDING_SIZE); if (!track->vos_data) { return AVERROR(ENOMEM); } memcpy(track->vos_data, st->codecpar->extradata, track->vos_len); + memset(track->vos_data + track->vos_len, 0, AV_INPUT_BUFFER_PADDING_SIZE); } } @@ -6713,10 +6717,11 @@ static int mov_write_trailer(AVFormatContext *s) AVCodecParameters *par = track->par; track->vos_len = par->extradata_size; - track->vos_data = av_malloc(track->vos_len); + track->vos_data = av_malloc(track->vos_len + AV_INPUT_BUFFER_PADDING_SIZE); if (!track->vos_data) return AVERROR(ENOMEM); memcpy(track->vos_data, par->extradata, track->vos_len); + memset(track->vos_data + track->vos_len, 0, AV_INPUT_BUFFER_PADDING_SIZE); } mov->need_rewrite_extradata = 0; }
Fixes ticket #8183. Signed-off-by: James Almer <jamrial@gmail.com> --- libavformat/movenc.c | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-)