Skip to content

Conversation

staticlibs
Copy link

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:

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.

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.
@yhirose
Copy link
Owner

yhirose commented Sep 18, 2025

@staticlibs could you please add a unit test in test/test.cc? Thanks!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants