cf-socket: don't try getting local IP without socket

In cf_tcp_connect(), it might fail and not get a socket assigned to
ctx->sock but set_local_ip() is still called which would make
getsockname() get invoked with a negative file desriptor and fail.

By adding this check, set_local_ip() will now instead blank out the
fields correctly.

Spotted by CodeSonar

Closes #13577
This commit is contained in:
Daniel Stenberg 2024-05-10 10:52:58 +02:00
parent cabbb9b2a5
commit 4d38cea94f
No known key found for this signature in database
GPG Key ID: 5CC908FDB71E12C2

View File

@ -923,7 +923,8 @@ static CURLcode set_local_ip(struct Curl_cfilter *cf,
struct cf_socket_ctx *ctx = cf->ctx;
#ifdef HAVE_GETSOCKNAME
if(!(data->conn->handler->protocol & CURLPROTO_TFTP)) {
if((ctx->sock != CURL_SOCKET_BAD) &&
!(data->conn->handler->protocol & CURLPROTO_TFTP)) {
/* TFTP does not connect, so it cannot get the IP like this */
char buffer[STRERROR_LEN];