mirror of
https://github.com/curl/curl.git
synced 2026-04-15 02:21:41 +03:00
cf-socket: check params and remove accept procondition
- creating a socket filter with NULL addrinfo fails with CURLE_BAD_FUNCTION_ARGUMENT - remove getsockname use before accept call, serves no purpose and did not lead to proper error before Reported-by: Joshua Rogers Closes #18882
This commit is contained in:
parent
decd7e157c
commit
2f3cf17e33
1 changed files with 15 additions and 13 deletions
|
|
@ -1761,6 +1761,11 @@ CURLcode Curl_cf_tcp_create(struct Curl_cfilter **pcf,
|
|||
(void)data;
|
||||
(void)conn;
|
||||
DEBUGASSERT(transport == TRNSPRT_TCP);
|
||||
if(!ai) {
|
||||
result = CURLE_BAD_FUNCTION_ARGUMENT;
|
||||
goto out;
|
||||
}
|
||||
|
||||
ctx = calloc(1, sizeof(*ctx));
|
||||
if(!ctx) {
|
||||
result = CURLE_OUT_OF_MEMORY;
|
||||
|
|
@ -1857,6 +1862,7 @@ static CURLcode cf_udp_connect(struct Curl_cfilter *cf,
|
|||
*done = TRUE;
|
||||
return CURLE_OK;
|
||||
}
|
||||
|
||||
*done = FALSE;
|
||||
if(ctx->sock == CURL_SOCKET_BAD) {
|
||||
result = cf_socket_open(cf, data);
|
||||
|
|
@ -1873,10 +1879,6 @@ static CURLcode cf_udp_connect(struct Curl_cfilter *cf,
|
|||
FMT_SOCKET_T " (%s:%d)",
|
||||
ctx->sock, ctx->ip.local_ip, ctx->ip.local_port);
|
||||
}
|
||||
else {
|
||||
CURL_TRC_CF(data, cf, "cf_udp_connect(), opened socket=%"
|
||||
FMT_SOCKET_T " (unconnected)", ctx->sock);
|
||||
}
|
||||
*done = TRUE;
|
||||
cf->connected = TRUE;
|
||||
}
|
||||
|
|
@ -2058,6 +2060,7 @@ static CURLcode cf_tcp_accept_connect(struct Curl_cfilter *cf,
|
|||
bool *done)
|
||||
{
|
||||
struct cf_socket_ctx *ctx = cf->ctx;
|
||||
char errbuf[STRERROR_LEN];
|
||||
#ifdef USE_IPV6
|
||||
struct Curl_sockaddr_storage add;
|
||||
#else
|
||||
|
|
@ -2076,6 +2079,7 @@ static CURLcode cf_tcp_accept_connect(struct Curl_cfilter *cf,
|
|||
return CURLE_OK;
|
||||
}
|
||||
|
||||
*done = FALSE;
|
||||
timeout_ms = cf_tcp_accept_timeleft(cf, data);
|
||||
if(timeout_ms < 0) {
|
||||
/* if a timeout was already reached, bail out */
|
||||
|
|
@ -2103,23 +2107,21 @@ static CURLcode cf_tcp_accept_connect(struct Curl_cfilter *cf,
|
|||
|
||||
if(!incoming) {
|
||||
CURL_TRC_CF(data, cf, "nothing heard from the server yet");
|
||||
*done = FALSE;
|
||||
return CURLE_OK;
|
||||
}
|
||||
|
||||
if(!getsockname(ctx->sock, (struct sockaddr *) &add, &size)) {
|
||||
size = sizeof(add);
|
||||
size = sizeof(add);
|
||||
#ifdef HAVE_ACCEPT4
|
||||
s_accepted = CURL_ACCEPT4(ctx->sock, (struct sockaddr *) &add, &size,
|
||||
SOCK_NONBLOCK | SOCK_CLOEXEC);
|
||||
s_accepted = CURL_ACCEPT4(ctx->sock, (struct sockaddr *) &add, &size,
|
||||
SOCK_NONBLOCK | SOCK_CLOEXEC);
|
||||
#else
|
||||
s_accepted = CURL_ACCEPT(ctx->sock, (struct sockaddr *) &add, &size);
|
||||
s_accepted = CURL_ACCEPT(ctx->sock, (struct sockaddr *) &add, &size);
|
||||
#endif
|
||||
}
|
||||
|
||||
if(CURL_SOCKET_BAD == s_accepted) {
|
||||
failf(data, "Error accept()ing server connect");
|
||||
return CURLE_FTP_PORT_FAILED;
|
||||
failf(data, "Error accept()ing server connect: %s",
|
||||
curlx_strerror(SOCKERRNO, errbuf, sizeof(errbuf)));
|
||||
return CURLE_FTP_ACCEPT_FAILED;
|
||||
}
|
||||
|
||||
infof(data, "Connection accepted from server");
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue