diff --git a/ChangeLog b/ChangeLog index 440b0d1bd4..4ea334ad0e 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2008-02-12 Wim Taymans + + Patch by: Josep Torra Valles + + * gst/h264parse/gsth264parse.c: (gst_h264_parse_chain_reverse): + Fix potential buffer leak in reverse mode. Fixes #516061. + 2008-02-12 Sebastian Dröge * sys/dshowdecwrapper/gstdshowaudiodec.c: diff --git a/common b/common index 05a617c904..2a19465fdb 160000 --- a/common +++ b/common @@ -1 +1 @@ -Subproject commit 05a617c9043ddb78f8578195b18c166d7e1d4c2e +Subproject commit 2a19465fdb43a75f4d32950fd2beb1beb950eec2 diff --git a/gst/h264parse/gsth264parse.c b/gst/h264parse/gsth264parse.c index dee03969d5..12b2ba726c 100644 --- a/gst/h264parse/gsth264parse.c +++ b/gst/h264parse/gsth264parse.c @@ -683,6 +683,7 @@ gst_h264_parse_chain_reverse (GstH264Parse * h264parse, gboolean discont, GstBuffer * buffer) { GstFlowReturn res = GST_FLOW_OK; + GstBuffer *gbuf = NULL; /* if we have a discont, move buffers to the decode list */ if (G_UNLIKELY (discont)) { @@ -700,7 +701,6 @@ gst_h264_parse_chain_reverse (GstH264Parse * h264parse, gboolean discont, h264parse->prev = NULL; while (h264parse->gather) { - GstBuffer *gbuf; guint8 *data; /* get new buffer and init the start code search to the end position */ @@ -761,6 +761,7 @@ gst_h264_parse_chain_reverse (GstH264Parse * h264parse, gboolean discont, last); prev = gst_buffer_create_sub (gbuf, 0, last); gst_buffer_unref (gbuf); + gbuf = NULL; break; } } @@ -777,6 +778,12 @@ gst_h264_parse_chain_reverse (GstH264Parse * h264parse, gboolean discont, GST_BUFFER_SIZE (buffer)); h264parse->gather = g_list_prepend (h264parse->gather, buffer); } + + if (gbuf) { + gst_buffer_unref (gbuf); + gbuf = NULL; + } + return res; }