From 612fa49d1d01c83e90f0b933c1b7aeee79161b68 Mon Sep 17 00:00:00 2001
From: "arseny.kapoulkine"
 <arseny.kapoulkine@99668b35-9821-0410-8761-19e4c4f06640>
Date: Mon, 20 Sep 2010 19:06:45 +0000
Subject: [PATCH] XPath: xpath_parse_result is now default-initialized to
 object with failed status

git-svn-id: http://pugixml.googlecode.com/svn/trunk@738 99668b35-9821-0410-8761-19e4c4f06640
---
 src/pugixml.cpp | 16 ++++++++--------
 src/pugixml.hpp |  4 ++++
 2 files changed, 12 insertions(+), 8 deletions(-)

diff --git a/src/pugixml.cpp b/src/pugixml.cpp
index 7063fc38..0b76d1f1 100644
--- a/src/pugixml.cpp
+++ b/src/pugixml.cpp
@@ -9016,9 +9016,6 @@ namespace pugi
 
 	xpath_query::xpath_query(const char_t* query, xpath_variable_set* variables): _alloc(0), _root(0)
 	{
-		_result.error = 0;
-		_result.offset = 0;
-
 		xpath_allocator* alloc = xpath_allocator::create();
 
 		if (!alloc)
@@ -9035,10 +9032,11 @@ namespace pugi
 
 			_root = xpath_parser::parse(query, variables, alloc, &_result);
 
-		#ifdef PUGIXML_NO_EXCEPTIONS
-			if (_root) // only store allocator if parsing was a success
-		#endif
-			_alloc = static_cast<xpath_allocator*>(alloc_holder.release());
+			if (_root)
+			{
+				_alloc = static_cast<xpath_allocator*>(alloc_holder.release());
+				_result.error = 0;
+			}
 		}
 	}
 
@@ -9127,7 +9125,9 @@ namespace pugi
 		#ifdef PUGIXML_NO_EXCEPTIONS
 			return xpath_node_set();
 		#else
-			xpath_parse_result result = {"Expression does not evaluate to node set", 0};
+			xpath_parse_result result;
+			result.error = "Expression does not evaluate to node set";
+
 			throw xpath_exception(result);
 		#endif
 		}
diff --git a/src/pugixml.hpp b/src/pugixml.hpp
index 89494bf9..b6f1710f 100644
--- a/src/pugixml.hpp
+++ b/src/pugixml.hpp
@@ -1775,6 +1775,10 @@ namespace pugi
 		/// Last parsed offset (in characters from string start)
 		ptrdiff_t offset;
 
+		xpath_parse_result(): error("Internal error"), offset(0)
+		{
+		}
+
 		/// Cast to bool operator
 		operator bool() const
 		{
-- 
GitLab