From 87b79835014a386fb51b52bc993dbb693bd27197 Mon Sep 17 00:00:00 2001 From: Angus Gratton Date: Wed, 8 Oct 2014 09:35:23 +1100 Subject: [PATCH] Fix double-free issue in File::create Triggered when opening a file from the command line. During startup Sigsession::set_default_device calls Device::use which loads a global _sr_session, then as part of file loading the File::create method is called which treats _sr_session as a temp variable (loaded then immediately released), finally a Device::release releases the (differently allocated) global _sr_session again causing the double free. Given File::create is only using the sigrok session temporarily within its function scope, this change gives it its own temporary session instance. This fixes bug #405. --- pv/device/file.cpp | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/pv/device/file.cpp b/pv/device/file.cpp index e82c5ec..368276a 100644 --- a/pv/device/file.cpp +++ b/pv/device/file.cpp @@ -56,10 +56,11 @@ map File::get_device_info() const File* File::create(const string &name) { - if (sr_session_load(name.c_str(), &SigSession::_sr_session) == SR_OK) { + struct sr_session *temp_session; + if (sr_session_load(name.c_str(), &temp_session) == SR_OK) { GSList *devlist = NULL; - sr_session_dev_list(SigSession::_sr_session, &devlist); - sr_session_destroy(SigSession::_sr_session); + sr_session_dev_list(temp_session, &devlist); + sr_session_destroy(temp_session); if (devlist) { sr_dev_inst *const sdi = (sr_dev_inst*)devlist->data; -- 2.30.2