summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHavard Graff <havard.graff@gmail.com>2016-11-30 15:55:01 +0100
committerTim-Philipp Müller <tim@centricular.com>2019-12-02 23:53:20 +0000
commit48064fc8ec6c93582e4e03f3c9c7e3041c2236f5 (patch)
tree158235e39da70c0ea35d13e720786bbf7d03dcbf
parent999d8beaa7296ca444269acb8fd8567c269ab490 (diff)
downloadgstreamer-plugins-good-48064fc8ec6c93582e4e03f3c9c7e3041c2236f5.tar.gz
rtpL16depay: don't crash if data is not modulo channels*width
-rw-r--r--gst/rtp/gstrtpL16depay.c16
1 files changed, 14 insertions, 2 deletions
diff --git a/gst/rtp/gstrtpL16depay.c b/gst/rtp/gstrtpL16depay.c
index 601f16edc..3695da961 100644
--- a/gst/rtp/gstrtpL16depay.c
+++ b/gst/rtp/gstrtpL16depay.c
@@ -232,6 +232,7 @@ gst_rtp_L16_depay_process (GstRTPBaseDepayload * depayload, GstRTPBuffer * rtp)
GstBuffer *outbuf;
gint payload_len;
gboolean marker;
+ GstAudioInfo *info;
rtpL16depay = GST_RTP_L16_DEPAY (depayload);
@@ -251,10 +252,15 @@ gst_rtp_L16_depay_process (GstRTPBaseDepayload * depayload, GstRTPBuffer * rtp)
}
outbuf = gst_buffer_make_writable (outbuf);
+ info = &rtpL16depay->info;
+
+ if (payload_len % info->bpf != 0)
+ goto wrong_payload_size;
+
if (rtpL16depay->order &&
!gst_audio_buffer_reorder_channels (outbuf,
- rtpL16depay->info.finfo->format, rtpL16depay->info.channels,
- rtpL16depay->info.position, rtpL16depay->order->pos)) {
+ info->finfo->format, info->channels,
+ info->position, rtpL16depay->order->pos)) {
goto reorder_failed;
}
@@ -269,6 +275,12 @@ empty_packet:
("Empty Payload."), (NULL));
return NULL;
}
+wrong_payload_size:
+ {
+ GST_ELEMENT_WARNING (rtpL16depay, STREAM, DECODE,
+ ("Wrong Payload Size."), (NULL));
+ return NULL;
+ }
reorder_failed:
{
GST_ELEMENT_ERROR (rtpL16depay, STREAM, DECODE,