summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/pugixml.cpp12
-rw-r--r--tests/test_xpath_variables.cpp2
2 files changed, 8 insertions, 6 deletions
diff --git a/src/pugixml.cpp b/src/pugixml.cpp
index 5b77a27..5190937 100644
--- a/src/pugixml.cpp
+++ b/src/pugixml.cpp
@@ -7715,7 +7715,7 @@ PUGI__NS_BEGIN
}
}
- PUGI__FN xpath_variable* get_variable_scratch(char_t (&buffer)[32], xpath_variable_set* set, const char_t* begin, const char_t* end)
+ PUGI__FN bool get_variable_scratch(char_t (&buffer)[32], xpath_variable_set* set, const char_t* begin, const char_t* end, xpath_variable** out_result)
{
size_t length = static_cast<size_t>(end - begin);
char_t* scratch = buffer;
@@ -7724,19 +7724,19 @@ PUGI__NS_BEGIN
{
// need to make dummy on-heap copy
scratch = static_cast<char_t*>(xml_memory::allocate((length + 1) * sizeof(char_t)));
- if (!scratch) return 0;
+ if (!scratch) return false;
}
// copy string to zero-terminated buffer and perform lookup
memcpy(scratch, begin, length * sizeof(char_t));
scratch[length] = 0;
- xpath_variable* result = set->get(scratch);
+ *out_result = set->get(scratch);
// free dummy buffer
if (scratch != buffer) xml_memory::deallocate(scratch);
- return result;
+ return true;
}
PUGI__NS_END
@@ -10309,7 +10309,9 @@ PUGI__NS_BEGIN
if (!_variables)
throw_error("Unknown variable: variable set is not provided");
- xpath_variable* var = get_variable_scratch(_scratch, _variables, name.begin, name.end);
+ xpath_variable* var = 0;
+ if (!get_variable_scratch(_scratch, _variables, name.begin, name.end, &var))
+ throw_error_oom();
if (!var)
throw_error("Unknown variable: variable set does not contain the given name");
diff --git a/tests/test_xpath_variables.cpp b/tests/test_xpath_variables.cpp
index 53b40cf..7a099c4 100644
--- a/tests/test_xpath_variables.cpp
+++ b/tests/test_xpath_variables.cpp
@@ -293,7 +293,7 @@ TEST(xpath_variables_long_name_out_of_memory)
CHECK_FORCE_FAIL("Expected exception");
}
- catch (const xpath_exception&)
+ catch (const std::bad_alloc&)
{
}
#endif