diff --git a/src/pugixml.cpp b/src/pugixml.cpp index c84ad2af4642d727254025f4a86e5938d3da0c94..0b50fe701a681b8dbb795aa29566b9d82fd7e7ee 100644 --- a/src/pugixml.cpp +++ b/src/pugixml.cpp @@ -134,7 +134,7 @@ namespace pugi if (lhs[i] != rhs[i]) return false; - return true; + return lhs[count] == 0; } // Character set pattern match. diff --git a/src/pugixpath.cpp b/src/pugixpath.cpp index f5663bd5fa73879cf82011f3b76f4d5747ffdc82..6239ed2b49dbf0a92b5dd32b69d952f11d51a416 100644 --- a/src/pugixpath.cpp +++ b/src/pugixpath.cpp @@ -940,9 +940,7 @@ namespace pugi { size_t length = static_cast<size_t>(end - begin); - if (!impl::strequalrange(other, begin, length)) return false; - - return other[length] == 0; + return impl::strequalrange(other, begin, length); } }; diff --git a/tests/test_dom_traverse.cpp b/tests/test_dom_traverse.cpp index 2e6b5e3159a5fc9fa5251d1e7133fc4bfc302246..896bf6f362eb16296db43290dd2761bcdcf37635 100644 --- a/tests/test_dom_traverse.cpp +++ b/tests/test_dom_traverse.cpp @@ -596,6 +596,13 @@ TEST_XML(dom_node_first_element_by_path, "<node><child1>text<child2/></child1></ CHECK(doc.child(STR("node")).first_element_by_path(STR("..")) == doc); CHECK(doc.child(STR("node")).first_element_by_path(STR(".")) == doc.child(STR("node"))); + + CHECK(doc.child(STR("node")).first_element_by_path(STR("../node/./child1/../.")) == doc.child(STR("node"))); + + CHECK(doc.child(STR("node")).first_element_by_path(STR("child1")) == doc.child(STR("node")).child(STR("child1"))); + CHECK(doc.child(STR("node")).first_element_by_path(STR("child1/")) == doc.child(STR("node")).child(STR("child1"))); + CHECK(doc.child(STR("node")).first_element_by_path(STR("child")) == xml_node()); + CHECK(doc.child(STR("node")).first_element_by_path(STR("child11")) == xml_node()); } struct test_walker: xml_tree_walker