Commit ddea68d3 authored by Paul Novotny's avatar Paul Novotny

Fix yaml-cpp 0.5.2 issue (Closes: #814499)

parent bb970e88
Description: Fix some Node::operator[] regressions from 0.5.1
Author: Paul Novotny <paul@paulnovo.us>
Bug-Debian: https://bugs.debian.org/835417
Origin: upstream, https://github.com/jbeder/yaml-cpp/commit/b426fafff
Last-Update: 2016-10-11
--- a/include/yaml-cpp/node/impl.h
+++ b/include/yaml-cpp/node/impl.h
@@ -142,7 +142,7 @@
template <typename T, typename S>
inline const T Node::as(const S& fallback) const {
if (!m_isValid)
- throw InvalidNode();
+ return fallback;
return as_if<T, S>(*this)(fallback);
}
@@ -275,26 +275,26 @@
inline const_iterator Node::begin() const {
if (!m_isValid)
- throw InvalidNode();
+ return const_iterator();
return m_pNode ? const_iterator(m_pNode->begin(), m_pMemory)
: const_iterator();
}
inline iterator Node::begin() {
if (!m_isValid)
- throw InvalidNode();
+ return iterator();
return m_pNode ? iterator(m_pNode->begin(), m_pMemory) : iterator();
}
inline const_iterator Node::end() const {
if (!m_isValid)
- throw InvalidNode();
+ return const_iterator();
return m_pNode ? const_iterator(m_pNode->end(), m_pMemory) : const_iterator();
}
inline iterator Node::end() {
if (!m_isValid)
- throw InvalidNode();
+ return iterator();
return m_pNode ? iterator(m_pNode->end(), m_pMemory) : iterator();
}
--- a/test/node/node_test.cpp
+++ b/test/node/node_test.cpp
@@ -73,6 +73,12 @@
EXPECT_EQ(2, node.size());
}
+TEST(NodeTest, UndefinedConstNodeWithFallback) {
+ Node node;
+ const Node& cn = node;
+ EXPECT_EQ(cn["undefined"].as<int>(3), 3);
+}
+
TEST(NodeTest, MapIteratorWithUndefinedValues) {
Node node;
node["key"] = "value";
@@ -84,6 +90,32 @@
EXPECT_EQ(1, count);
}
+TEST(NodeTest, ConstIteratorOnConstUndefinedNode) {
+ Node node;
+ const Node& cn = node;
+ const Node& undefinedCn = cn["undefined"];
+
+ std::size_t count = 0;
+ for (const_iterator it = undefinedCn.begin(); it != undefinedCn.end(); ++it) {
+ count++;
+ }
+ EXPECT_EQ(0, count);
+}
+
+TEST(NodeTest, IteratorOnConstUndefinedNode) {
+ Node node;
+ const Node& cn = node;
+ const Node& undefinedCn = cn["undefined"];
+
+ Node& nonConstUndefinedNode = const_cast<Node&>(undefinedCn);
+
+ std::size_t count = 0;
+ for (iterator it = nonConstUndefinedNode.begin(); it != nonConstUndefinedNode.end(); ++it) {
+ count++;
+ }
+ EXPECT_EQ(0, count);
+}
+
TEST(NodeTest, SimpleSubkeys) {
Node node;
node["device"]["udid"] = "12345";
...@@ -2,3 +2,4 @@ pkgconfig.patch ...@@ -2,3 +2,4 @@ pkgconfig.patch
install-cmake-dev-files.patch install-cmake-dev-files.patch
reproducible-build.patch reproducible-build.patch
0003-Workaround-bug-in-googletest-fixing-bug-812284.patch 0003-Workaround-bug-in-googletest-fixing-bug-812284.patch
backport-b426fafff.patch
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment