aboutsummaryrefslogtreecommitdiff
path: root/src/test/httpserver_tests.cpp
diff options
context:
space:
mode:
authorpablomartin4btc <pablomartin4btc@gmail.com>2023-04-14 19:03:08 -0300
committerfanquake <fanquake@gmail.com>2023-04-18 11:43:59 +0100
commit3a26b19df25ca99a9a58ae5398f6f423ac074368 (patch)
tree69edd85ecd31e3487a409716f2ce16fb71a58947 /src/test/httpserver_tests.cpp
parentc40b1da2fd64bb10f120f85966b44f0d2bb315f8 (diff)
bugfix: rest: avoid segfault for invalid URI
`evhttp_uri_parse` can return a nullptr, for example when the URI contains invalid characters (e.g. "%"). `GetQueryParameterFromUri` passes the output of `evhttp_uri_parse` straight into `evhttp_uri_get_query`, which means that anyone calling a REST endpoint in which query parameters are used (e.g. `rest_headers`) can cause a segfault. This bugfix is designed to be minimal and without additional behaviour change. Github-Pull: #27468 Rebased-From: 11422cc5720c8d73a87600de8fe8abb156db80dc
Diffstat (limited to 'src/test/httpserver_tests.cpp')
-rw-r--r--src/test/httpserver_tests.cpp4
1 files changed, 4 insertions, 0 deletions
diff --git a/src/test/httpserver_tests.cpp b/src/test/httpserver_tests.cpp
index ee59ec6967..c95a777e80 100644
--- a/src/test/httpserver_tests.cpp
+++ b/src/test/httpserver_tests.cpp
@@ -34,5 +34,9 @@ BOOST_AUTO_TEST_CASE(test_query_parameters)
// Invalid query string syntax is the same as not having parameters
uri = "/rest/endpoint/someresource.json&p1=v1&p2=v2";
BOOST_CHECK(!GetQueryParameterFromUri(uri.c_str(), "p1").has_value());
+
+ // URI with invalid characters (%) raises a runtime error regardless of which query parameter is queried
+ uri = "/rest/endpoint/someresource.json&p1=v1&p2=v2%";
+ BOOST_CHECK_EXCEPTION(GetQueryParameterFromUri(uri.c_str(), "p1"), std::runtime_error, HasReason("URI parsing failed, it likely contained RFC 3986 invalid characters"));
}
BOOST_AUTO_TEST_SUITE_END()