Skip to content

Commit 23ff9a5

Browse files
committed
Fix error reporting in SSLClient
When the `SSLClient` is used to connect to a plain-HTTP server (which can happen in clients due to some end-user misconfiguration) it can return a failure from the `send()` call without setting the `Error` reference to the corresponding error code. This can cause problems to callers, that may expect that, when the check like this is passed on the response: ```c++ if (res.error() == Error::Success) ``` then they can access the response contents with `res.value()`. When `SSLClient`'s connection fails - the contents `unique_ptr` is not set and an attemt to access it causes UB. This change fixes the `SSLClient::create_and_connect_socket` method making sure that, the `Error` value is set correctly when the `is_valid()` check fails.
1 parent 41be1e2 commit 23ff9a5

File tree

1 file changed

+5
-1
lines changed

1 file changed

+5
-1
lines changed

httplib.h

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10911,7 +10911,11 @@ inline long SSLClient::get_openssl_verify_result() const {
1091110911
inline SSL_CTX *SSLClient::ssl_context() const { return ctx_; }
1091210912

1091310913
inline bool SSLClient::create_and_connect_socket(Socket &socket, Error &error) {
10914-
return is_valid() && ClientImpl::create_and_connect_socket(socket, error);
10914+
if (!is_valid()) {
10915+
error = Error::SSLConnection;
10916+
return false;
10917+
}
10918+
return ClientImpl::create_and_connect_socket(socket, error);
1091510919
}
1091610920

1091710921
// Assumes that socket_mutex_ is locked and that there are no requests in flight

0 commit comments

Comments
 (0)