From 6e807f12bc7191f7a34d8ac47395e949830e91a6 Mon Sep 17 00:00:00 2001 From: Oliver Hamlet Date: Thu, 16 Jul 2015 11:59:12 +0100 Subject: [PATCH] Enforce unique elements in YAML sets. If a YAML sequence containing non-uniue elements is decoded into a set or unordered_set, it should fail. --- src/backend/helpers/yaml_set_helpers.h | 6 ++++-- src/tests/backend/helpers/test_yaml_set_helpers.h | 6 ++++++ 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/src/backend/helpers/yaml_set_helpers.h b/src/backend/helpers/yaml_set_helpers.h index de63209e..35a686b0 100644 --- a/src/backend/helpers/yaml_set_helpers.h +++ b/src/backend/helpers/yaml_set_helpers.h @@ -47,7 +47,8 @@ namespace YAML { rhs.clear(); for (const auto &element : node) { - rhs.insert(element.template as()); + if (!rhs.insert(element.template as()).second) + return false; } return true; } @@ -80,7 +81,8 @@ namespace YAML { rhs.clear(); for (const auto &element : node) { - rhs.insert(element.template as()); + if (!rhs.insert(element.template as()).second) + return false; } return true; } diff --git a/src/tests/backend/helpers/test_yaml_set_helpers.h b/src/tests/backend/helpers/test_yaml_set_helpers.h index b006b6a3..cfe70178 100644 --- a/src/tests/backend/helpers/test_yaml_set_helpers.h +++ b/src/tests/backend/helpers/test_yaml_set_helpers.h @@ -46,6 +46,9 @@ TEST(set, YamlDecode) { EXPECT_EQ(stringSet.begin(), stringSet.find("a")); EXPECT_EQ(++stringSet.begin(), stringSet.find("b")); EXPECT_EQ(--stringSet.end(), stringSet.find("c")); + + node = YAML::Load("[a, b, c, c]"); + EXPECT_ANY_THROW(node.as>()); } TEST(set, YamlEmitter) { @@ -82,6 +85,9 @@ TEST(unordered_set, YAMLDecode) { EXPECT_EQ(1, stringSet.count("a")); EXPECT_EQ(1, stringSet.count("b")); EXPECT_EQ(1, stringSet.count("c")); + + node = YAML::Load("[a, b, c, c]"); + EXPECT_ANY_THROW(node.as>()); } bool sequenceOf(const char val1,