bpmdetect: Pass at most 2048 samples to SoundTouch's BPMDetect

Internally BPMDetect assumes that at most 2048 samples are passed
to it at once and stores those in a stack allocated static sized
array. If we pass too many samples this will result in a buffer overflow
resulting in heavy stack corruption and a crash. Fixes bug #570996.
This commit is contained in:
Sebastian Dröge 2009-02-10 10:17:43 +01:00
parent 325c0d5d10
commit 9a1d1cb91f

View file

@ -207,12 +207,24 @@ gst_bpm_detect_transform_ip (GstBaseTransform * trans, GstBuffer * in)
* data but our buffer data shouldn't be modified.
*/
if (filter->format.channels == 1) {
bpm_detect->priv->detect->inputSamples ((gfloat *) GST_BUFFER_DATA (in),
nsamples);
gfloat *inbuf = (gfloat *) GST_BUFFER_DATA (in);
while (nsamples > 0) {
bpm_detect->priv->detect->inputSamples (inbuf, MIN (nsamples, 2048));
nsamples -= 2048;
inbuf += 2048;
}
} else {
gfloat *data =
gfloat *data, *inbuf;
data = inbuf =
(gfloat *) g_memdup (GST_BUFFER_DATA (in), GST_BUFFER_SIZE (in));
bpm_detect->priv->detect->inputSamples (data, nsamples);
while (nsamples > 0) {
bpm_detect->priv->detect->inputSamples (inbuf, MIN (nsamples, 2048));
nsamples -= 2048;
inbuf += 2048 * 2;
}
g_free (data);
}