From dec3aa55e98322bad15fcbcfcbe13ec0e49d897d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tim-Philipp=20M=C3=BCller?= Date: Sat, 26 Nov 2022 09:23:59 +0100 Subject: [PATCH] audioconvert, audioresample, audiofilter: fix divide by 0 for input buffer without caps gst-launch-1.0 audiotestsrc ! udpsink host=127.0.0.1 gst-launch-1.0 udpsrc ! audioconvert ! autoaudiosink would crash with a floating point exception when clipping the input buffer owing to a division by zero because no caps event was received. Part-of: --- .../gst-plugins-base/gst-libs/gst/audio/gstaudiofilter.c | 5 +++++ .../gst-plugins-base/gst/audioconvert/gstaudioconvert.c | 5 +++++ .../gst-plugins-base/gst/audioresample/gstaudioresample.c | 5 +++++ 3 files changed, 15 insertions(+) diff --git a/subprojects/gst-plugins-base/gst-libs/gst/audio/gstaudiofilter.c b/subprojects/gst-plugins-base/gst-libs/gst/audio/gstaudiofilter.c index e6ad740bff..0039833407 100644 --- a/subprojects/gst-plugins-base/gst-libs/gst/audio/gstaudiofilter.c +++ b/subprojects/gst-plugins-base/gst-libs/gst/audio/gstaudiofilter.c @@ -180,6 +180,11 @@ gst_audio_filter_submit_input_buffer (GstBaseTransform * btrans, GstAudioFilter *filter = GST_AUDIO_FILTER (btrans); if (btrans->segment.format == GST_FORMAT_TIME) { + if (!GST_AUDIO_INFO_IS_VALID (&filter->info)) { + GST_WARNING_OBJECT (filter, "Got buffer, but not negotiated yet!"); + return GST_FLOW_NOT_NEGOTIATED; + } + input = gst_audio_buffer_clip (input, &btrans->segment, filter->info.rate, filter->info.bpf); diff --git a/subprojects/gst-plugins-base/gst/audioconvert/gstaudioconvert.c b/subprojects/gst-plugins-base/gst/audioconvert/gstaudioconvert.c index 896ef9c03b..474dcaea8f 100644 --- a/subprojects/gst-plugins-base/gst/audioconvert/gstaudioconvert.c +++ b/subprojects/gst-plugins-base/gst/audioconvert/gstaudioconvert.c @@ -934,6 +934,11 @@ gst_audio_convert_submit_input_buffer (GstBaseTransform * base, GstAudioConvert *this = GST_AUDIO_CONVERT (base); if (base->segment.format == GST_FORMAT_TIME) { + if (!GST_AUDIO_INFO_IS_VALID (&this->in_info)) { + GST_WARNING_OBJECT (this, "Got buffer, but not negotiated yet!"); + return GST_FLOW_NOT_NEGOTIATED; + } + input = gst_audio_buffer_clip (input, &base->segment, this->in_info.rate, this->in_info.bpf); diff --git a/subprojects/gst-plugins-base/gst/audioresample/gstaudioresample.c b/subprojects/gst-plugins-base/gst/audioresample/gstaudioresample.c index fbfb5ca636..d05957584b 100644 --- a/subprojects/gst-plugins-base/gst/audioresample/gstaudioresample.c +++ b/subprojects/gst-plugins-base/gst/audioresample/gstaudioresample.c @@ -977,6 +977,11 @@ gst_audio_resample_submit_input_buffer (GstBaseTransform * base, GstAudioResample *resample = GST_AUDIO_RESAMPLE (base); if (base->segment.format == GST_FORMAT_TIME) { + if (!GST_AUDIO_INFO_IS_VALID (&resample->in)) { + GST_WARNING_OBJECT (resample, "Got buffer, but not negotiated yet!"); + return GST_FLOW_NOT_NEGOTIATED; + } + input = gst_audio_buffer_clip (input, &base->segment, resample->in.rate, resample->in.bpf);