diff options
author | Havard Graff <havard.graff@gmail.com> | 2016-11-30 15:55:01 +0100 |
---|---|---|
committer | Tim-Philipp Müller <tim@centricular.com> | 2019-12-02 23:53:20 +0000 |
commit | 48064fc8ec6c93582e4e03f3c9c7e3041c2236f5 (patch) | |
tree | 158235e39da70c0ea35d13e720786bbf7d03dcbf | |
parent | 999d8beaa7296ca444269acb8fd8567c269ab490 (diff) |
rtpL16depay: don't crash if data is not modulo channels*width
-rw-r--r-- | gst/rtp/gstrtpL16depay.c | 16 |
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, |