summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorarseny.kapoulkine <arseny.kapoulkine@99668b35-9821-0410-8761-19e4c4f06640>2010-07-10 15:48:34 +0000
committerarseny.kapoulkine <arseny.kapoulkine@99668b35-9821-0410-8761-19e4c4f06640>2010-07-10 15:48:34 +0000
commitf4cb6eb737cd22c355cb3b3b4f5f1ef215a8576b (patch)
tree081f5b5b4ac36aa9cee72d9eedf6c8264ab9a755
parentdf42996eab0dc38bd29eecb6dcb9ab83dd981dc3 (diff)
XPath: Out-of-bounds xpath_node_set access is now undefined
git-svn-id: http://pugixml.googlecode.com/svn/trunk@581 99668b35-9821-0410-8761-19e4c4f06640
-rw-r--r--src/pugixml.hpp2
-rw-r--r--src/pugixpath.cpp5
-rw-r--r--tests/test_xpath_api.cpp2
3 files changed, 4 insertions, 5 deletions
diff --git a/src/pugixml.hpp b/src/pugixml.hpp
index dacd8cd..b87aeb4 100644
--- a/src/pugixml.hpp
+++ b/src/pugixml.hpp
@@ -2215,7 +2215,7 @@ namespace pugi
* \param index - requested index
* \return element
*/
- xpath_node operator[](size_t index) const;
+ const xpath_node& operator[](size_t index) const;
/**
* Get begin constant iterator for collection
diff --git a/src/pugixpath.cpp b/src/pugixpath.cpp
index 6239ed2..80368ff 100644
--- a/src/pugixpath.cpp
+++ b/src/pugixpath.cpp
@@ -792,9 +792,10 @@ namespace pugi
return size() == 0;
}
- xpath_node xpath_node_set::operator[](size_t index) const
+ const xpath_node& xpath_node_set::operator[](size_t index) const
{
- return (index >= size()) ? xpath_node() : m_begin[index];
+ assert(index < size());
+ return m_begin[index];
}
xpath_node_set::iterator xpath_node_set::mut_begin()
diff --git a/tests/test_xpath_api.cpp b/tests/test_xpath_api.cpp
index 453220d..56e8ff6 100644
--- a/tests/test_xpath_api.cpp
+++ b/tests/test_xpath_api.cpp
@@ -87,7 +87,6 @@ inline void xpath_api_node_accessors_helper(const xpath_node_set& set)
CHECK(!set.empty());
CHECK_STRING(set[0].node().name(), STR("foo"));
CHECK_STRING(set[1].node().name(), STR("foo"));
- CHECK(!set[2]);
CHECK(set.first() == set[0]);
CHECK(set.begin() + 2 == set.end());
CHECK(set.begin()[0] == set[0] && set.begin()[1] == set[1]);
@@ -99,7 +98,6 @@ TEST_XML(xpath_api_nodeset_accessors, "<node><foo/><foo/></node>")
CHECK(null.size() == 0);
CHECK(null.type() == xpath_node_set::type_unsorted);
CHECK(null.empty());
- CHECK(!null[0]);
CHECK(!null.first());
CHECK(null.begin() == null.end());