From 984abc89a82e19fb5f22eebd0196bae57df4f7ca Mon Sep 17 00:00:00 2001 From: Jonas Kvinge Date: Mon, 22 Apr 2019 00:42:03 +0200 Subject: [PATCH] Fix chromaprinter unref buffer crash --- src/musicbrainz/chromaprinter.cpp | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/src/musicbrainz/chromaprinter.cpp b/src/musicbrainz/chromaprinter.cpp index fd29ebd3e..e09748c85 100644 --- a/src/musicbrainz/chromaprinter.cpp +++ b/src/musicbrainz/chromaprinter.cpp @@ -133,7 +133,6 @@ QString Chromaprinter::CreateFingerprint() { // Wait until EOS or error GstMessage *msg = gst_bus_timed_pop_filtered(bus, kTimeoutSecs * GST_SECOND, static_cast(GST_MESSAGE_EOS | GST_MESSAGE_ERROR)); - if (msg != nullptr) { if (msg->type == GST_MESSAGE_ERROR) { // Report error @@ -220,12 +219,16 @@ GstFlowReturn Chromaprinter::NewBufferCallback(GstAppSink *app_sink, gpointer se Chromaprinter *me = reinterpret_cast(self); GstSample *sample = gst_app_sink_pull_sample(app_sink); + if (!sample) return GST_FLOW_ERROR; GstBuffer *buffer = gst_sample_get_buffer(sample); - GstMapInfo map; - gst_buffer_map(buffer, &map, GST_MAP_READ); - me->buffer_.write(reinterpret_cast(map.data), map.size); - gst_buffer_unmap(buffer, &map); - gst_buffer_unref(buffer); + if (buffer) { + GstMapInfo map; + if (gst_buffer_map(buffer, &map, GST_MAP_READ)) { + me->buffer_.write(reinterpret_cast(map.data), map.size); + gst_buffer_unmap(buffer, &map); + } + } + gst_sample_unref(sample); return GST_FLOW_OK;