]> sigrok.org Git - pulseview.git/commitdiff
Fix #792 by making sure we don't request samples that don't exist
authorSoeren Apel <redacted>
Tue, 3 May 2016 06:53:24 +0000 (08:53 +0200)
committerUwe Hermann <redacted>
Tue, 3 May 2016 22:48:11 +0000 (00:48 +0200)
pv/mainwindow.cpp
pv/storesession.cpp

index 1a05907c9c1a4470be862fdf2691887411b915e3..4f6bc41d551c4182919539cb3810882f9e10e60d 100644 (file)
@@ -74,6 +74,7 @@ using std::cerr;
 using std::endl;
 using std::list;
 using std::map;
+using std::max;
 using std::pair;
 using std::shared_ptr;
 using std::string;
@@ -257,7 +258,8 @@ void MainWindow::export_file(shared_ptr<OutputFormat> format,
                const pv::util::Timestamp& start_time = view_->cursors()->first()->time();
                const pv::util::Timestamp& end_time = view_->cursors()->second()->time();
 
-               const uint64_t start_sample = start_time.convert_to<double>() * samplerate;
+               const uint64_t start_sample =
+                       std::max((double)0, start_time.convert_to<double>() * samplerate);
                const uint64_t end_sample = end_time.convert_to<double>() * samplerate;
 
                sample_range = std::make_pair(start_sample, end_sample);
index 9a481dd86696ba60ae5e4b61c03bd9719156b1c8..2a4c8500a37b532a3341ed6db473bf33528d6043 100644 (file)
@@ -160,16 +160,20 @@ bool StoreSession::start()
        }
 
        // Check whether the user wants to export a certain sample range
+       uint64_t end_sample;
+
        if (sample_range_.first == sample_range_.second) {
                start_sample_ = 0;
                sample_count_ = any_segment->get_sample_count();
        } else {
                if (sample_range_.first > sample_range_.second) {
                        start_sample_ = sample_range_.second;
-                       sample_count_ = sample_range_.first - sample_range_.second;
+                       end_sample = min(sample_range_.first, any_segment->get_sample_count());
+                       sample_count_ = end_sample - start_sample_;
                } else {
                        start_sample_ = sample_range_.first;
-                       sample_count_ = sample_range_.second - sample_range_.first;
+                       end_sample = min(sample_range_.second, any_segment->get_sample_count());
+                       sample_count_ = end_sample - start_sample_;
                }
        }