summaryrefslogtreecommitdiff
path: root/src/core/common/VariantReader.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/core/common/VariantReader.cpp')
-rw-r--r--src/core/common/VariantReader.cpp12
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;
}