summaryrefslogtreecommitdiffstats
path: root/gst/rtp/gstrtpmpadepay.c
diff options
context:
space:
mode:
authorWim Taymans <wim.taymans@gmail.com>2006-11-27 16:26:50 +0000
committerWim Taymans <wim.taymans@gmail.com>2006-11-27 16:26:50 +0000
commit9e782fdc7e3be9fcf6e621260391ccfe830ac41f (patch)
treeb15aa66f8deeb09795d130a7255cc5935d337a47 /gst/rtp/gstrtpmpadepay.c
parent13ee276c8d59d5f7ab71fb9122fced32dccba9f7 (diff)
gst/rtp/gstrtpmpadepay.c: Small buffer overflow fix and improve debugging.
Original commit message from CVS: * gst/rtp/gstrtpmpadepay.c: (gst_rtp_mpa_depay_chain): Small buffer overflow fix and improve debugging.
Diffstat (limited to 'gst/rtp/gstrtpmpadepay.c')
-rw-r--r--gst/rtp/gstrtpmpadepay.c18
1 files changed, 14 insertions, 4 deletions
diff --git a/gst/rtp/gstrtpmpadepay.c b/gst/rtp/gstrtpmpadepay.c
index 3dcc981e..bce5e005 100644
--- a/gst/rtp/gstrtpmpadepay.c
+++ b/gst/rtp/gstrtpmpadepay.c
@@ -174,7 +174,8 @@ gst_rtp_mpa_depay_chain (GstPad * pad, GstBuffer * buf)
payload_len = gst_rtp_buffer_get_payload_len (buf);
payload = gst_rtp_buffer_get_payload (buf);
- frag_offset = (payload[2] << 8) | payload[3];
+ if (payload_len <= 4)
+ goto empty_packet;
/* strip off header
*
@@ -184,6 +185,8 @@ gst_rtp_mpa_depay_chain (GstPad * pad, GstBuffer * buf)
* | MBZ | Frag_offset |
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
*/
+ frag_offset = (payload[2] << 8) | payload[3];
+
payload_len -= 4;
payload += 4;
@@ -195,7 +198,8 @@ gst_rtp_mpa_depay_chain (GstPad * pad, GstBuffer * buf)
memcpy (GST_BUFFER_DATA (outbuf), payload, payload_len);
- GST_DEBUG ("gst_rtp_mpa_depay_chain: pushing buffer of size %d",
+ GST_DEBUG_OBJECT (rtpmpadepay,
+ "gst_rtp_mpa_depay_chain: pushing buffer of size %d",
GST_BUFFER_SIZE (outbuf));
gst_buffer_unref (buf);
@@ -209,16 +213,22 @@ gst_rtp_mpa_depay_chain (GstPad * pad, GstBuffer * buf)
bad_packet:
{
- GST_DEBUG ("Packet did not validate");
+ GST_DEBUG_OBJECT (rtpmpadepay, "Packet did not validate");
gst_buffer_unref (buf);
return GST_FLOW_ERROR;
}
bad_payload:
{
- GST_DEBUG ("Unexpected payload type %u", pt);
+ GST_DEBUG_OBJECT (rtpmpadepay, "Unexpected payload type %u", pt);
gst_buffer_unref (buf);
return GST_FLOW_ERROR;
}
+empty_packet:
+ {
+ GST_DEBUG_OBJECT (rtpmpadepay, "Empty payload");
+ gst_buffer_unref (buf);
+ return GST_FLOW_OK;
+ }
}
static void