aboutsummaryrefslogtreecommitdiffstats
path: root/ffmpeg.c
diff options
context:
space:
mode:
authorMichael Niedermayer <michaelni@gmx.at>2012-08-10 04:33:42 +0200
committerMichael Niedermayer <michaelni@gmx.at>2012-08-10 04:36:43 +0200
commit969267482de97b08503d27d2fe090ec820273e40 (patch)
treebd53994a26490bc3d93e2f1d69e6bf6121211450 /ffmpeg.c
parenta0d15027e3b0c7825cc10052363b72e9398578b9 (diff)
downloadffmpeg-969267482de97b08503d27d2fe090ec820273e40.tar.gz
ffmpeg: Allocate new buffer for bitstream filter when buffer shifted
fix crash with aac_adtstoasc bitstream filter Fixes Ticket1441 Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
Diffstat (limited to 'ffmpeg.c')
-rw-r--r--ffmpeg.c10
1 files changed, 10 insertions, 0 deletions
diff --git a/ffmpeg.c b/ffmpeg.c
index d1df56c044..662e84af66 100644
--- a/ffmpeg.c
+++ b/ffmpeg.c
@@ -534,6 +534,16 @@ static void write_frame(AVFormatContext *s, AVPacket *pkt, OutputStream *ost)
&new_pkt.data, &new_pkt.size,
pkt->data, pkt->size,
pkt->flags & AV_PKT_FLAG_KEY);
+ if(a == 0 && new_pkt.data != pkt->data && new_pkt.destruct) {
+ uint8_t *t = av_malloc(new_pkt.size + FF_INPUT_BUFFER_PADDING_SIZE); //the new should be a subset of the old so cannot overflow
+ if(t) {
+ memcpy(t, new_pkt.data, new_pkt.size);
+ memset(t + new_pkt.size, 0, FF_INPUT_BUFFER_PADDING_SIZE);
+ new_pkt.data = t;
+ a = 1;
+ } else
+ a = AVERROR(ENOMEM);
+ }
if (a > 0) {
av_free_packet(pkt);
new_pkt.destruct = av_destruct_packet;