aboutsummaryrefslogtreecommitdiff
path: root/tests/test_document.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tests/test_document.cpp')
-rw-r--r--tests/test_document.cpp36
1 files changed, 36 insertions, 0 deletions
diff --git a/tests/test_document.cpp b/tests/test_document.cpp
index 5379092..0e0bad4 100644
--- a/tests/test_document.cpp
+++ b/tests/test_document.cpp
@@ -1817,3 +1817,39 @@ TEST(document_move_assign_empty)
CHECK_NODE(doc, STR("<node2/>"));
}
#endif
+
+TEST(document_load_buffer_convert_out_of_memory)
+{
+ const char* source = "<node>\xe7</node>";
+ size_t size = strlen(source);
+
+ test_runner::_memory_fail_threshold = 1;
+
+ xml_document doc;
+
+ xml_parse_result result;
+ result.status = status_out_of_memory;
+ CHECK_ALLOC_FAIL(result = doc.load_buffer(source, size, pugi::parse_default, pugi::encoding_latin1));
+
+ CHECK(result.status == status_out_of_memory);
+}
+
+TEST(document_load_buffer_own_convert_out_of_memory)
+{
+ const char* source = "<node>\xe7</node>";
+ size_t size = strlen(source);
+
+ void* buffer = pugi::get_memory_allocation_function()(size);
+ CHECK(buffer);
+ memcpy(buffer, source, size);
+
+ test_runner::_memory_fail_threshold = 1;
+
+ xml_document doc;
+
+ xml_parse_result result;
+ result.status = status_out_of_memory;
+ CHECK_ALLOC_FAIL(result = doc.load_buffer_inplace_own(buffer, size, pugi::parse_default, pugi::encoding_latin1));
+
+ CHECK(result.status == status_out_of_memory);
+}