From 7b7ab1f5cb3607bf29885eeffcb2cb215b2c9e9f Mon Sep 17 00:00:00 2001 From: Soeren Apel Date: Sat, 10 Feb 2018 10:52:16 +0100 Subject: [PATCH 1/1] Fix #1038 by catching invalid cursor ranges --- pv/storesession.cpp | 7 +++++++ pv/toolbars/mainbar.cpp | 7 +++++++ 2 files changed, 14 insertions(+) diff --git a/pv/storesession.cpp b/pv/storesession.cpp index 50815c26..494f2db3 100644 --- a/pv/storesession.cpp +++ b/pv/storesession.cpp @@ -145,6 +145,7 @@ bool StoreSession::start() uint64_t end_sample; if (sample_range_.first == sample_range_.second) { + // No sample range specified, save everything we have start_sample_ = 0; sample_count_ = any_segment->get_sample_count(); } else { @@ -159,6 +160,12 @@ bool StoreSession::start() } } + // Make sure the sample range is valid + if (start_sample_ > any_segment->get_sample_count()) { + error_ = tr("Can't save range without sample data."); + return false; + } + // Begin storing try { const auto context = session_.device_manager().context(); diff --git a/pv/toolbars/mainbar.cpp b/pv/toolbars/mainbar.cpp index 1879693d..34b120fe 100644 --- a/pv/toolbars/mainbar.cpp +++ b/pv/toolbars/mainbar.cpp @@ -612,6 +612,13 @@ void MainBar::export_file(shared_ptr format, bool selection_only) const uint64_t end_sample = (uint64_t)max( (double)0, end_time.convert_to() * samplerate); + if ((start_sample == 0) && (end_sample == 0)) { + // Both cursors are negative and were clamped to 0 + show_session_error(tr("Invalid Range"), tr("The cursors don't " \ + "define a valid range of samples.")); + return; + } + sample_range = make_pair(start_sample, end_sample); } else { sample_range = make_pair(0, 0); -- 2.30.2