From 6b78abced221c4df035bec014d7d697211ff1316 Mon Sep 17 00:00:00 2001 From: Paul Beckingham Date: Sun, 12 Jul 2015 16:12:32 -0400 Subject: [PATCH] CLI2: Tightened selection of MODIFICATION Lexer::Type::number upgrade to ID - When a write command contains no ID/UUID, looking for Lexer::Type::number arguments that are tagged as MODIFICATIONS is now limited to only positive integers that are found. --- src/CLI2.cpp | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/src/CLI2.cpp b/src/CLI2.cpp index e367bfd0b..48b9ab112 100644 --- a/src/CLI2.cpp +++ b/src/CLI2.cpp @@ -1307,12 +1307,18 @@ void CLI2::findIDs () { if (a.hasTag ("MODIFICATION")) { - if (a._lextype == Lexer::Type::number) + std::string raw = a.attribute ("raw"); + + // For a number to be an ID, it must not contain any sign or floating + // point elements. + if (a._lextype == Lexer::Type::number && + raw.find ('.') == std::string::npos && + raw.find ('e') == std::string::npos && + raw.find ('-') == std::string::npos) { a.unTag ("MODIFICATION"); a.tag ("FILTER"); - std::string number = a.attribute ("raw"); - _id_ranges.push_back (std::pair (number, number)); + _id_ranges.push_back (std::pair (raw, raw)); } else if (a._lextype == Lexer::Type::set) { @@ -1321,7 +1327,7 @@ void CLI2::findIDs () // Split the ID list into elements. std::vector elements; - split (elements, a.attribute ("raw"), ','); + split (elements, raw, ','); for (auto& element : elements) {