diff options
author | Andreas Stöckel <astoecke@techfak.uni-bielefeld.de> | 2015-01-25 18:57:40 +0100 |
---|---|---|
committer | Andreas Stöckel <astoecke@techfak.uni-bielefeld.de> | 2015-01-25 18:57:40 +0100 |
commit | 7352e5e6481964817643d02756186dd206c7b848 (patch) | |
tree | 98eeb7b21fd8e032f64c23d985444a822b9746ca /src/core/common | |
parent | 67c3618e593f88eb8177404475586735902d693f (diff) | |
parent | 93a8af2431529d145919c5898971c503d6c73e93 (diff) |
Merge branch 'master' of somweyr.de:ousia
Diffstat (limited to 'src/core/common')
-rw-r--r-- | src/core/common/VariantReader.cpp | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/src/core/common/VariantReader.cpp b/src/core/common/VariantReader.cpp index 7320973..c0368f1 100644 --- a/src/core/common/VariantReader.cpp +++ b/src/core/common/VariantReader.cpp @@ -559,6 +559,7 @@ std::pair<bool, Variant::cardinalityType> VariantReader::parseCardinality( switch (c) { case '}': case ',': + card.merge({start}); reader.resetPeek(); break; case '-': { @@ -569,6 +570,7 @@ std::pair<bool, Variant::cardinalityType> VariantReader::parseCardinality( error(reader, logger, ERR_UNEXPECTED_END, Variant::cardinalityType{}); } + reader.resetPeek(); Number n2; if (!n2.parse(reader, logger, cardDelims) || !n2.isInt() || n2.intValue() < 0) { @@ -576,8 +578,16 @@ std::pair<bool, Variant::cardinalityType> VariantReader::parseCardinality( "Invalid number for cardinality!", Variant::cardinalityType{}); } - unsigned int end = (unsigned int)n2.intValue(); + if (end <= start) { + return error(reader, logger, + std::string("The start of the range (") + + std::to_string(start) + + ") was bigger (or equal) to the end " + "of the range (" + + std::to_string(end) + ")!", + Variant::cardinalityType{}); + } card.merge({start, end}); break; } |