summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorBenjamin Paassen <bpaassen@techfak.uni-bielefeld.de>2015-01-25 13:19:48 +0100
committerBenjamin Paassen <bpaassen@techfak.uni-bielefeld.de>2015-01-25 13:19:48 +0100
commit37a002577e7f4949e0634dca7e828b5333d2ccc5 (patch)
treee6d4a61a13591bcd84db71540b53616ac98cf3d4 /src
parentc36f476f434c16a52ada15bdfcc5f92bcad1b8db (diff)
Bugfixes in VariantReader for cardinality reading and extensive cardinality reading tests.
Diffstat (limited to 'src')
-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;
}