diff --git a/common.c b/common.c index d17c14d..b04066a 100644 --- a/common.c +++ b/common.c @@ -391,7 +391,7 @@ int connect_addr(struct connection *cnx, int fd_from, connect_blocking blocking) } /* Store some data to write to the queue later */ -int defer_write(struct queue *q, void* data, int data_size) +int defer_write(struct queue *q, void* data, ssize_t data_size) { char *p; ptrdiff_t data_offset = q->deferred_data - q->begin_deferred_data; @@ -403,7 +403,7 @@ int defer_write(struct queue *q, void* data, int data_size) q->begin_deferred_data = p; q->deferred_data = p + data_offset; p += data_offset + q->deferred_data_size; - q->deferred_data_size += data_size; + q->deferred_data_size += (int)data_size; memcpy(p, data, data_size); return 0; @@ -415,13 +415,13 @@ int defer_write(struct queue *q, void* data, int data_size) * */ int flush_deferred(struct queue *q) { - int n; + ssize_t n; print_message(msg_fd, "flushing deferred data to fd %d\n", q->fd); n = write(q->fd, q->deferred_data, q->deferred_data_size); if (n == -1) - return n; + return (int)n; if (n == q->deferred_data_size) { /* All has been written -- release the memory */ @@ -432,10 +432,10 @@ int flush_deferred(struct queue *q) } else { /* There is data left */ q->deferred_data += n; - q->deferred_data_size -= n; + q->deferred_data_size -= (int)n; } - return n; + return (int)n; } @@ -470,7 +470,8 @@ void dump_connection(struct connection *cnx) int fd2fd(struct queue *target_q, struct queue *from_q) { char buffer[BUFSIZ]; - int target, from, size_r, size_w; + int target, from; + ssize_t size_r, size_w; target = target_q->fd; from = from_q->fd; @@ -515,7 +516,7 @@ int fd2fd(struct queue *target_q, struct queue *from_q) CHECK_RES_RETURN(size_w, "write", FD_CNXCLOSED); - return size_w; + return (int)size_w; } /* returns a string that prints the IP and port of the sockaddr */ diff --git a/common.h b/common.h index f94b743..9dc1c91 100644 --- a/common.h +++ b/common.h @@ -172,7 +172,7 @@ int resolve_split_name(struct addrinfo **out, char* hostname, char* port); int start_listen_sockets(struct listen_endpoint *sockfd[]); -int defer_write(struct queue *q, void* data, int data_size); +int defer_write(struct queue *q, void* data, ssize_t data_size); int flush_deferred(struct queue *q); extern struct sslhcfg_item cfg; diff --git a/sslh-main.c b/sslh-main.c index 9b02835..b427dac 100644 --- a/sslh-main.c +++ b/sslh-main.c @@ -69,7 +69,7 @@ static void printsettings(void) strcpy(buf, "resolve on forward"); if (!p->resolve_on_forward) { sprintaddr(buf, sizeof(buf), p->saddr); - int len = strlen(buf); + size_t len = strlen(buf); sprintf(buf+len, " family %d %d", p->saddr->ai_family, p->saddr->ai_addr->sa_family); @@ -98,7 +98,8 @@ static void printsettings(void) static void setup_regex_probe(struct sslhcfg_protocols_item *p) #ifdef ENABLE_REGEX { - int num_patterns, i, error; + size_t num_patterns, i; + int error; pcre2_code** pattern_list; PCRE2_SIZE error_offset; PCRE2_UCHAR8 err_str[120]; @@ -186,7 +187,7 @@ void config_sanity_check(struct sslhcfg_item* cfg) #endif for (i = 0; i < cfg->protocols_len; ++i) { - if (strcmp(cfg->protocols[i].name, "tls")) { + if (strcmp(cfg->protocols[i].name, "tls") != 0) { if (cfg->protocols[i].sni_hostnames_len) { print_message(msg_config_error, "name: \"%s\"; host: \"%s\"; port: \"%s\": " "Config option sni_hostnames is only applicable for tls\n", diff --git a/tls.c b/tls.c index bf0101d..5a0e64a 100644 --- a/tls.c +++ b/tls.c @@ -224,7 +224,7 @@ parse_server_name_extension(const struct TLSProtocol *tls_data, const char *data switch (data[pos]) { /* name type */ case 0x00: /* host_name */ if(has_match(tls_data->sni_hostname_list, tls_data->sni_list_len, data + pos + 3, len)) { - return len; + return (int)len; } else { return TLS_ENOEXT; } @@ -253,7 +253,7 @@ parse_alpn_extension(const struct TLSProtocol *tls_data, const char *data, size_ return TLS_EPROTOCOL; if (len > 0 && has_match(tls_data->alpn_protocol_list, tls_data->alpn_list_len, data + pos + 1, len)) { - return len; + return (int)len; } else if (len > 0) { print_message(msg_probe_error, "Unknown ALPN name: %.*s\n", (int)len, data + pos + 1); } @@ -301,11 +301,11 @@ struct TLSProtocol * tls_data_set_list(struct TLSProtocol *tls_data, int alpn, const char** list, size_t list_len) { if (alpn) { tls_data->alpn_protocol_list = list; - tls_data->alpn_list_len = list_len; + tls_data->alpn_list_len = (int)list_len; tls_data->match_mode.tls_match_alpn = 1; } else { tls_data->sni_hostname_list = list; - tls_data->sni_list_len = list_len; + tls_data->sni_list_len = (int)list_len; tls_data->match_mode.tls_match_sni = 1; } diff --git a/udp-listener.c b/udp-listener.c index d3f5590..720cc94 100644 --- a/udp-listener.c +++ b/udp-listener.c @@ -259,7 +259,8 @@ struct connection* udp_c2s_forward(int sockfd, struct loop_info* fd_info) struct connection* cnx; ssize_t len; socklen_t addrlen; - int res, target, out = -1; + ssize_t res; + int target, out = -1; char data[65536]; /* Theoretical max is 65507 (https://en.wikipedia.org/wiki/User_Datagram_Protocol). This will do. Dynamic allocation is possible with the MSG_PEEK flag in recvfrom(2), but that'd imply malloc/free overhead for each packet, when really 64K is not that much */ @@ -280,7 +281,7 @@ struct connection* udp_c2s_forward(int sockfd, struct loop_info* fd_info) len, target, sprintaddr(addr_str, sizeof(addr_str), &addrinfo)); if (target == -1) { - res = probe_buffer(data, len, udp_protocols, udp_protocols_len, &proto); + res = probe_buffer(data, (int)len, udp_protocols, udp_protocols_len, &proto); /* First version: if we can't work out the protocol from the first * packet, drop it. Conceivably, we could store several packets to * run probes on packet sets */ @@ -324,7 +325,7 @@ void udp_s2c_forward(struct connection* cnx) { int sockfd = cnx->target_sock; char data[65536]; - int res; + ssize_t res; res = recvfrom(sockfd, data, sizeof(data), 0, NULL, NULL); if ((res == -1) && ((errno == EAGAIN) || (errno == EWOULDBLOCK))) return;