From 1688f44185c1d2c81afa6541d25e8bd7c35ce81b Mon Sep 17 00:00:00 2001 From: Arseny Kapoulkine Date: Wed, 8 Feb 2017 00:09:32 -0800 Subject: tests: Add more XPath out of memory tests --- tests/test_xpath.cpp | 13 +++++++++++++ tests/test_xpath_variables.cpp | 12 ++++++++++++ 2 files changed, 25 insertions(+) diff --git a/tests/test_xpath.cpp b/tests/test_xpath.cpp index 6cae607..a2af5e6 100644 --- a/tests/test_xpath.cpp +++ b/tests/test_xpath.cpp @@ -521,6 +521,19 @@ TEST(xpath_memory_concat_massive) CHECK(size == 5001); } +TEST_XML(xpath_memory_translate_table, "a") +{ + test_runner::_memory_fail_threshold = 32768 + 4096 + 128; + + // 128b per table => we need 32 translate calls to exhaust a page + std::basic_string query = STR("concat("); + for (int i = 0; i < 32; ++i) + query += STR("translate(.,'a','A'),"); + query += STR("'')"); + + CHECK_ALLOC_FAIL(pugi::xpath_query(query.c_str()).evaluate_string(doc.first_child()) == STR("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA")); +} + TEST_XML(xpath_sort_copy_share, "test") { // copy sharing shares the name/value data for nodes that can potentially make document order optimization invalid (silently) diff --git a/tests/test_xpath_variables.cpp b/tests/test_xpath_variables.cpp index 2033a8e..c64e0e6 100644 --- a/tests/test_xpath_variables.cpp +++ b/tests/test_xpath_variables.cpp @@ -474,6 +474,18 @@ TEST_XML(xpath_variables_copy_out_of_memory, "") CHECK(set2.get(STR("d"))->get_node_set().size() == 2); } +TEST(xpath_variables_copy_out_of_memory_clone) +{ + xpath_variable_set set1; + set1.set(STR("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"), true); + + xpath_variable_set set2 = set1; + + test_runner::_memory_fail_threshold = 60; + + CHECK_ALLOC_FAIL(xpath_variable_set set3 = set1); +} + #ifdef PUGIXML_HAS_MOVE TEST_XML(xpath_variables_move, "") { -- cgit v1.2.3