From 8fa38fc4c3c5b53cbbfa45508dde84098ff1dc27 Mon Sep 17 00:00:00 2001 From: Paul Beckingham Date: Sat, 23 May 2009 17:59:45 -0400 Subject: [PATCH] Enhancement - Sequence range limiting - Prevents overly large ranges. A bug was reported from a user who tried this: % task annotate 1 1-987654321 The 1-987654321 was assumed to be a valid range, and caused task to consume all available memory. The workaround was: % task 1 annotate 1-987654321 But it seems a good idea to range-limit sequences. Currently it is 1000. Perhaps this should be configurable. --- src/Sequence.cpp | 4 ++-- src/Sequence.h | 2 ++ src/tests/seq.t.cpp | 2 +- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/src/Sequence.cpp b/src/Sequence.cpp index b4497ce13..34e238ed3 100644 --- a/src/Sequence.cpp +++ b/src/Sequence.cpp @@ -83,8 +83,8 @@ void Sequence::parse (const std::string& input) if (low > high) throw std::string ("Inverted sequence range high-low"); - if (high - low > 1000) - throw std::string ("Range too large, exceeded 1,000 IDs"); + if (high - low >= SEQUENCE_MAX) + throw std::string ("ID Range too large"); for (int i = low; i <= high; ++i) this->push_back (i); diff --git a/src/Sequence.h b/src/Sequence.h index df9fa6143..005e3b173 100644 --- a/src/Sequence.h +++ b/src/Sequence.h @@ -30,6 +30,8 @@ #include #include +#define SEQUENCE_MAX 1000 + class Sequence : public std::vector { public: diff --git a/src/tests/seq.t.cpp b/src/tests/seq.t.cpp index 90ff2f2d0..0459dd5cd 100644 --- a/src/tests/seq.t.cpp +++ b/src/tests/seq.t.cpp @@ -90,7 +90,7 @@ int main (int argc, char** argv) seq = parseSequence ("1--2"); t.is (seq.size (), (size_t)0, "seq '1--2' -> 0 items (error)"); - // 1-1000 + // 1-1000 (SEQUENCE_MAX); seq = parseSequence ("1-1000"); t.is (seq.size (), (size_t)1000, "seq '1-1000' -> 1000 items"); if (seq.size () == 1000)