Merge pull request #18334 from Faless/coverity_net

Various coverity scan fixes, WS FreeBSD fixes
This commit is contained in:
Rémi Verschelde 2018-05-01 08:44:11 +02:00 committed by GitHub
commit 9834b690ae
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
6 changed files with 42 additions and 14 deletions

View file

@ -101,7 +101,7 @@ IP_Address IP_Unix::_resolve_hostname(const String &p_hostname, Type p_type) {
hints.ai_family = AF_UNSPEC;
hints.ai_flags = AI_ADDRCONFIG;
};
hints.ai_flags &= !AI_NUMERICHOST;
hints.ai_flags &= ~AI_NUMERICHOST;
int s = getaddrinfo(p_hostname.utf8().get_data(), NULL, &hints, &result);
if (s != 0) {
@ -111,6 +111,8 @@ IP_Address IP_Unix::_resolve_hostname(const String &p_hostname, Type p_type) {
if (result == NULL || result->ai_addr == NULL) {
ERR_PRINT("Invalid response from getaddrinfo");
if (result)
freeaddrinfo(result);
return IP_Address();
};

View file

@ -124,11 +124,14 @@ void StreamPeerTCPPosix::set_socket(int p_sockfd, IP_Address p_host, int p_port,
sock_type = p_sock_type;
sockfd = p_sockfd;
#ifndef NO_FCNTL
fcntl(sockfd, F_SETFL, O_NONBLOCK);
if (fcntl(sockfd, F_SETFL, O_NONBLOCK) < 0) {
WARN_PRINT("Error setting socket as non blocking");
}
#else
int bval = 1;
ioctl(sockfd, FIONBIO, &bval);
if (ioctl(sockfd, FIONBIO, &bval) < 0) {
WARN_PRINT("Error setting socket as non blocking");
}
#endif
status = STATUS_CONNECTING;
@ -150,10 +153,14 @@ Error StreamPeerTCPPosix::connect_to_host(const IP_Address &p_host, uint16_t p_p
};
#ifndef NO_FCNTL
fcntl(sockfd, F_SETFL, O_NONBLOCK);
if (fcntl(sockfd, F_SETFL, O_NONBLOCK) < 0) {
WARN_PRINT("Error setting socket as non blocking");
}
#else
int bval = 1;
ioctl(sockfd, FIONBIO, &bval);
if (ioctl(sockfd, FIONBIO, &bval) < 0) {
WARN_PRINT("Error setting socket as non blocking");
}
#endif
struct sockaddr_storage their_addr;
@ -308,7 +315,9 @@ void StreamPeerTCPPosix::set_no_delay(bool p_enabled) {
ERR_FAIL_COND(!is_connected_to_host());
int flag = p_enabled ? 1 : 0;
setsockopt(sockfd, IPPROTO_TCP, TCP_NODELAY, (char *)&flag, sizeof(int));
if (setsockopt(sockfd, IPPROTO_TCP, TCP_NODELAY, (char *)&flag, sizeof(int)) < 0) {
ERR_PRINT("Unable to set TCP no delay option");
}
}
bool StreamPeerTCPPosix::is_connected_to_host() const {

View file

@ -91,10 +91,14 @@ Error TCPServerPosix::listen(uint16_t p_port, const IP_Address &p_bind_address)
ERR_FAIL_COND_V(sockfd == -1, FAILED);
#ifndef NO_FCNTL
fcntl(sockfd, F_SETFL, O_NONBLOCK);
if (fcntl(sockfd, F_SETFL, O_NONBLOCK) < 0) {
WARN_PRINT("Error setting socket as non blocking");
}
#else
int bval = 1;
ioctl(sockfd, FIONBIO, &bval);
if (ioctl(sockfd, FIONBIO, &bval) < 0) {
WARN_PRINT("Error setting socket as non blocking");
}
#endif
int reuse = 1;
@ -113,6 +117,7 @@ Error TCPServerPosix::listen(uint16_t p_port, const IP_Address &p_bind_address)
ERR_FAIL_V(FAILED);
};
} else {
close(sockfd);
return ERR_ALREADY_IN_USE;
};
@ -157,10 +162,14 @@ Ref<StreamPeerTCP> TCPServerPosix::take_connection() {
int fd = accept(listen_sockfd, (struct sockaddr *)&their_addr, &size);
ERR_FAIL_COND_V(fd == -1, Ref<StreamPeerTCP>());
#ifndef NO_FCNTL
fcntl(fd, F_SETFL, O_NONBLOCK);
if (fcntl(fd, F_SETFL, O_NONBLOCK) < 0) {
WARN_PRINT("Error setting socket as non blocking");
}
#else
int bval = 1;
ioctl(fd, FIONBIO, &bval);
if (ioctl(fd, FIONBIO, &bval) < 0) {
WARN_PRINT("Error setting socket as non blocking");
}
#endif
Ref<StreamPeerTCPPosix> conn = memnew(StreamPeerTCPPosix);

View file

@ -335,7 +335,9 @@ Error StreamPeerTCPWinsock::connect_to_host(const IP_Address &p_host, uint16_t p
void StreamPeerTCPWinsock::set_no_delay(bool p_enabled) {
ERR_FAIL_COND(!is_connected_to_host());
int flag = p_enabled ? 1 : 0;
setsockopt(sockfd, IPPROTO_TCP, TCP_NODELAY, (char *)&flag, sizeof(int));
if (setsockopt(sockfd, IPPROTO_TCP, TCP_NODELAY, (char *)&flag, sizeof(int)) != 0) {
ERR_PRINT("Unable to set TCP no delay option");
}
}
int StreamPeerTCPWinsock::get_available_bytes() const {

View file

@ -105,6 +105,7 @@ Error TCPServerWinsock::listen(uint16_t p_port, const IP_Address &p_bind_address
ERR_FAIL_V(FAILED);
};
} else {
closesocket(sockfd);
return ERR_ALREADY_IN_USE;
};

View file

@ -35,6 +35,7 @@
// Needed for socket_helpers on Android at least. UNIXes has it, just include if not windows
#if !defined(WINDOWS_ENABLED)
#include <netinet/in.h>
#include <sys/socket.h>
#endif
#include "drivers/unix/socket_helpers.h"
@ -190,9 +191,11 @@ IP_Address LWSPeer::get_connected_host() const {
IP_Address ip;
int port = 0;
socklen_t len;
socklen_t len = 0;
struct sockaddr_storage addr;
int fd = lws_get_socket_fd(wsi);
ERR_FAIL_COND_V(fd == -1, IP_Address());
int ret = getpeername(fd, (struct sockaddr *)&addr, &len);
ERR_FAIL_COND_V(ret != 0, IP_Address());
@ -209,9 +212,11 @@ uint16_t LWSPeer::get_connected_port() const {
IP_Address ip;
int port = 0;
socklen_t len;
socklen_t len = 0;
struct sockaddr_storage addr;
int fd = lws_get_socket_fd(wsi);
ERR_FAIL_COND_V(fd == -1, 0);
int ret = getpeername(fd, (struct sockaddr *)&addr, &len);
ERR_FAIL_COND_V(ret != 0, 0);