aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Scull <ascull@google.com>2021-03-30 12:53:04 +0000
committerAndrew Scull <ascull@google.com>2021-03-30 16:44:10 +0000
commitbdc577b46b966204b44de984308a0326624c860c (patch)
tree25b8078d37783ecca96cdf6677de6322035ce15d
parent42a7aa8fbfe401dcb06cd07f7f9242a1ef3b9627 (diff)
downloadlibcppbor-bdc577b46b966204b44de984308a0326624c860c.tar.gz
Error on unknown simple value
Null, true and false are handled but any other simple value, or floating pointer value, would otherwise reach the CHECK() that was expected to be unreachable. Instead, error when an unhandled value is seen. Test: cppbor_host_test_external Change-Id: Idb1099bbc51649e5eb8f5fb4fa60553e8cbe7e8f
-rw-r--r--src/cppbor_parse.cpp3
-rw-r--r--tests/cppbor_test.cpp18
2 files changed, 21 insertions, 0 deletions
diff --git a/src/cppbor_parse.cpp b/src/cppbor_parse.cpp
index fcf0dac..ab01ee7 100644
--- a/src/cppbor_parse.cpp
+++ b/src/cppbor_parse.cpp
@@ -275,6 +275,9 @@ std::tuple<const uint8_t*, ParseClient*> parseRecursively(const uint8_t* begin,
return handleBool(addlData, begin, pos, parseClient);
case NULL_V:
return handleNull(begin, pos, parseClient);
+ default:
+ parseClient->error(begin, "Unsupported floating-point or simple value.");
+ return {begin, nullptr};
}
}
CHECK(false); // Impossible to get here.
diff --git a/tests/cppbor_test.cpp b/tests/cppbor_test.cpp
index ef98519..ebdcc02 100644
--- a/tests/cppbor_test.cpp
+++ b/tests/cppbor_test.cpp
@@ -1734,6 +1734,24 @@ TEST(FullParserTest, IndefiniteArray) {
message);
}
+TEST(FullParserTest, UnassignedSimpleValue) {
+ vector<uint8_t> unassignedSimpleValue = {0xE5};
+
+ auto [item, pos, message] = parse(unassignedSimpleValue);
+ EXPECT_THAT(item, IsNull());
+ EXPECT_EQ(pos, unassignedSimpleValue.data());
+ EXPECT_EQ("Unsupported floating-point or simple value.", message);
+}
+
+TEST(FullParserTest, FloatingPointValue) {
+ vector<uint8_t> floatingPointValue = {0xFA, 0x12, 0x75, 0x34, 0x37};
+
+ auto [item, pos, message] = parse(floatingPointValue);
+ EXPECT_THAT(item, IsNull());
+ EXPECT_EQ(pos, floatingPointValue.data());
+ EXPECT_EQ("Unsupported floating-point or simple value.", message);
+}
+
TEST(MapGetValueByKeyTest, Map) {
Array compoundItem(1, 2, 3, 4, 5, Map(4, 5, "a", "b"));
auto clone = compoundItem.clone();