Skip to content

Commit 67e4d62

Browse files
committed
Merge pull request microsoft#415 from HEPTACOM/master
Handled uncaught exception when request contains bad encoded URI
2 parents 01d1ab1 + c5eeac3 commit 67e4d62

File tree

2 files changed

+34
-1
lines changed

2 files changed

+34
-1
lines changed

Release/src/http/listener/http_server_asio.cpp

+13-1
Original file line numberDiff line numberDiff line change
@@ -900,7 +900,19 @@ void asio_server_connection::async_read_until_buffersize(size_t size, const Read
900900
will_deref_and_erase_t asio_server_connection::dispatch_request_to_listener()
901901
{
902902
// locate the listener:
903-
http_listener_impl* pListener = m_p_parent->find_listener(m_request.relative_uri());
903+
http_listener_impl* pListener = nullptr;
904+
905+
try
906+
{
907+
pListener = m_p_parent->find_listener(m_request.relative_uri());
908+
}
909+
catch (const web::uri_exception&)
910+
{
911+
m_request.reply(status_codes::BadRequest);
912+
(will_erase_from_parent_t)do_response();
913+
(will_deref_t)deref();
914+
return will_deref_and_erase_t{};
915+
}
904916

905917
if (pListener == nullptr)
906918
{

Release/tests/functional/http/listener/request_relative_uri_tests.cpp

+21
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,27 @@ TEST(listener_uri_empty_path)
115115
listener.close().wait();
116116
}
117117

118+
TEST(listener_invalid_encoded_uri)
119+
{
120+
uri address(U("http://localhost:45678"));
121+
http_listener listener(address);
122+
listener.open().wait();
123+
test_http_client::scoped_client client(address);
124+
test_http_client * p_client = client.client();
125+
126+
listener.support([](http_request request)
127+
{
128+
request.reply(status_codes::OK);
129+
});
130+
VERIFY_ARE_EQUAL(0, p_client->request(methods::GET, U("/%invalid/uri")));
131+
p_client->next_response().then([](test_response *p_response)
132+
{
133+
http_asserts::assert_test_response_equals(p_response, status_codes::BadRequest);
134+
}).wait();
135+
136+
listener.close().wait();
137+
}
138+
118139
}
119140

120141
}}}}

0 commit comments

Comments
 (0)