From f4cb6eb737cd22c355cb3b3b4f5f1ef215a8576b Mon Sep 17 00:00:00 2001 From: "arseny.kapoulkine" Date: Sat, 10 Jul 2010 15:48:34 +0000 Subject: 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 --- src/pugixml.hpp | 2 +- src/pugixpath.cpp | 5 +++-- tests/test_xpath_api.cpp | 2 -- 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, "") 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()); -- cgit v1.2.3