From d75a081aa33990c97927882e21ea9a201d299edf Mon Sep 17 00:00:00 2001 From: Arseny Kapoulkine Date: Sat, 21 Oct 2023 11:11:11 -0700 Subject: [PATCH] Update fuzz_xpath.cpp Fix code style, no exceptions, other tweaks. --- tests/fuzz_xpath.cpp | 62 ++++++++++++++++++++++++-------------------- 1 file changed, 34 insertions(+), 28 deletions(-) diff --git a/tests/fuzz_xpath.cpp b/tests/fuzz_xpath.cpp index 2d97a2b..66cb84c 100644 --- a/tests/fuzz_xpath.cpp +++ b/tests/fuzz_xpath.cpp @@ -5,36 +5,42 @@ #include #include -extern "C" int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) { - FuzzedDataProvider fdp(Data, Size); - std::string text = fdp.ConsumeRandomLengthString(1024); +extern "C" int LLVMFuzzerTestOneInput(const uint8_t* Data, size_t Size) +{ + FuzzedDataProvider fdp(Data, Size); + std::string text = fdp.ConsumeRandomLengthString(1024); - try { - pugi::xpath_variable_set vars; - size_t var_count = fdp.ConsumeIntegralInRange(0, 50); - std::vector var_name_storage = {}; - for (size_t i = 0; i < var_count; i++) { - var_name_storage.push_back(fdp.ConsumeRandomLengthString(128)); +#ifndef PUGIXML_NO_EXCEPTIONS + try +#endif + { + pugi::xpath_variable_set vars; + size_t var_count = fdp.ConsumeIntegralInRange(0, 50); + std::vector var_name_storage; + for (size_t i = 0; i < var_count; ++i) + { + var_name_storage.push_back(fdp.ConsumeRandomLengthString(128)); - pugi::xpath_value_type value_type = - static_cast(fdp.ConsumeIntegralInRange(0, 5)); - vars.add(var_name_storage.back().c_str(), value_type); - } - pugi::xpath_query q(text.c_str(), &vars); + const int xpath_value_type_count = pugi::xpath_type_boolean + 1; + pugi::xpath_value_type value_type = static_cast(fdp.ConsumeIntegralInRange(0, xpath_value_type_count)); + vars.add(var_name_storage.back().c_str(), value_type); + } + pugi::xpath_query q(text.c_str(), &vars); - std::vector xml_buffer = - fdp.ConsumeBytes(fdp.ConsumeIntegralInRange(0, 1024)); - pugi::xml_document doc; - doc.load_buffer(xml_buffer.data(), xml_buffer.size(), pugi::parse_full); + std::vector xml_buffer = fdp.ConsumeBytes(fdp.ConsumeIntegralInRange(0, 1024)); + pugi::xml_document doc; + doc.load_buffer(xml_buffer.data(), xml_buffer.size(), pugi::parse_full); - bool boolean = q.evaluate_boolean(doc); - double num = q.evaluate_number(doc); - pugi::string_t s = q.evaluate_string(doc); - pugi::xpath_node n = q.evaluate_node(doc); - pugi::xpath_node_set set = q.evaluate_node_set(doc); - - } catch (pugi::xpath_exception &) { - } - - return 0; + bool boolean = q.evaluate_boolean(doc); + double num = q.evaluate_number(doc); + pugi::string_t s = q.evaluate_string(doc); + pugi::xpath_node n = q.evaluate_node(doc); + pugi::xpath_node_set set = q.evaluate_node_set(doc); + } +#ifndef PUGIXML_NO_EXCEPTIONS + catch (pugi::xpath_exception&) + { + } +#endif + return 0; }