From 5a0a0aac192e732e248d6b15343643d01a297817 Mon Sep 17 00:00:00 2001 From: Vincent Penquerc'h Date: Tue, 16 Aug 2011 18:34:59 +0100 Subject: [PATCH] ofa: don't crash when there's no data to create a fingerprint from Fixes a crash when no data flowed through. https://bugzilla.gnome.org/show_bug.cgi?id=656641 --- ext/ofa/gstofa.c | 23 +++++++++++++++++------ 1 file changed, 17 insertions(+), 6 deletions(-) diff --git a/ext/ofa/gstofa.c b/ext/ofa/gstofa.c index d1be48635e..a18d7e352e 100644 --- a/ext/ofa/gstofa.c +++ b/ext/ofa/gstofa.c @@ -117,16 +117,27 @@ create_fingerprint (GstOFA * ofa) GstBuffer *buf; gint rate = GST_AUDIO_FILTER (ofa)->format.rate; gint channels = GST_AUDIO_FILTER (ofa)->format.channels; - gint endianness = - (GST_AUDIO_FILTER (ofa)->format. - bigend) ? OFA_BIG_ENDIAN : OFA_LITTLE_ENDIAN; + gint endianness; GstTagList *tags; + guint available; + + available = gst_adapter_available (ofa->adapter); + + if (available == 0) { + GST_WARNING_OBJECT (ofa, "No data to take fingerprint from"); + ofa->record = FALSE; + return; + } + + if (GST_AUDIO_FILTER (ofa)->format.bigend) + endianness = OFA_BIG_ENDIAN; + else + endianness = OFA_LITTLE_ENDIAN; + GST_DEBUG ("Generating fingerprint"); - buf = - gst_adapter_take_buffer (ofa->adapter, - gst_adapter_available (ofa->adapter)); + buf = gst_adapter_take_buffer (ofa->adapter, available); ofa->fingerprint = g_strdup (ofa_create_print (GST_BUFFER_DATA (buf), endianness, GST_BUFFER_SIZE (buf) / 2, rate,