mirror of
https://git.savannah.nongnu.org/git/lwip.git
synced 2025-08-07 15:04:39 +08:00
Fixed bug #29979 (lwip_sendto did not check parameter "to" != NULL)
This commit is contained in:
parent
ddd2b69f27
commit
505dd10d3c
@ -160,9 +160,9 @@ static const int err_to_errno_table[] = {
|
|||||||
#ifndef set_errno
|
#ifndef set_errno
|
||||||
#define set_errno(err) errno = (err)
|
#define set_errno(err) errno = (err)
|
||||||
#endif
|
#endif
|
||||||
#else
|
#else /* ERRNO */
|
||||||
#define set_errno(err)
|
#define set_errno(err)
|
||||||
#endif
|
#endif /* ERRNO */
|
||||||
|
|
||||||
#define sock_set_errno(sk, e) do { \
|
#define sock_set_errno(sk, e) do { \
|
||||||
sk->err = (e); \
|
sk->err = (e); \
|
||||||
@ -758,7 +758,7 @@ lwip_send(int s, const void *data, size_t size, int flags)
|
|||||||
if (sock->conn->type != NETCONN_TCP) {
|
if (sock->conn->type != NETCONN_TCP) {
|
||||||
#if (LWIP_UDP || LWIP_RAW)
|
#if (LWIP_UDP || LWIP_RAW)
|
||||||
return lwip_sendto(s, data, size, flags, NULL, 0);
|
return lwip_sendto(s, data, size, flags, NULL, 0);
|
||||||
#else
|
#else /* (LWIP_UDP || LWIP_RAW) */
|
||||||
sock_set_errno(sock, err_to_errno(ERR_ARG));
|
sock_set_errno(sock, err_to_errno(ERR_ARG));
|
||||||
return -1;
|
return -1;
|
||||||
#endif /* (LWIP_UDP || LWIP_RAW) */
|
#endif /* (LWIP_UDP || LWIP_RAW) */
|
||||||
@ -790,9 +790,9 @@ lwip_sendto(int s, const void *data, size_t size, int flags,
|
|||||||
err_t err;
|
err_t err;
|
||||||
u16_t short_size;
|
u16_t short_size;
|
||||||
const struct sockaddr_in *to_in;
|
const struct sockaddr_in *to_in;
|
||||||
|
u16_t remote_port;
|
||||||
#if !LWIP_TCPIP_CORE_LOCKING
|
#if !LWIP_TCPIP_CORE_LOCKING
|
||||||
struct netbuf buf;
|
struct netbuf buf;
|
||||||
u16_t remote_port;
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
sock = get_socket(s);
|
sock = get_socket(s);
|
||||||
@ -803,7 +803,7 @@ lwip_sendto(int s, const void *data, size_t size, int flags,
|
|||||||
if (sock->conn->type == NETCONN_TCP) {
|
if (sock->conn->type == NETCONN_TCP) {
|
||||||
#if LWIP_TCP
|
#if LWIP_TCP
|
||||||
return lwip_send(s, data, size, flags);
|
return lwip_send(s, data, size, flags);
|
||||||
#else
|
#else /* LWIP_TCP */
|
||||||
sock_set_errno(sock, err_to_errno(ERR_ARG));
|
sock_set_errno(sock, err_to_errno(ERR_ARG));
|
||||||
return -1;
|
return -1;
|
||||||
#endif /* LWIP_TCP */
|
#endif /* LWIP_TCP */
|
||||||
@ -840,7 +840,13 @@ lwip_sendto(int s, const void *data, size_t size, int flags,
|
|||||||
p->payload = (void*)data;
|
p->payload = (void*)data;
|
||||||
#endif /* LWIP_NETIF_TX_SINGLE_PBUF */
|
#endif /* LWIP_NETIF_TX_SINGLE_PBUF */
|
||||||
|
|
||||||
inet_addr_to_ipaddr_p(remote_addr, &to_in->sin_addr);
|
if (to_in != NULL) {
|
||||||
|
inet_addr_to_ipaddr_p(remote_addr, &to_in->sin_addr);
|
||||||
|
remote_port = ntohs(to_in->sin_port);
|
||||||
|
} else {
|
||||||
|
ip_addr_set_any(&remote_addr);
|
||||||
|
remote_port = 0;
|
||||||
|
}
|
||||||
|
|
||||||
LOCK_TCPIP_CORE();
|
LOCK_TCPIP_CORE();
|
||||||
if (sock->conn->type == NETCONN_RAW) {
|
if (sock->conn->type == NETCONN_RAW) {
|
||||||
@ -848,10 +854,10 @@ lwip_sendto(int s, const void *data, size_t size, int flags,
|
|||||||
} else {
|
} else {
|
||||||
#if LWIP_CHECKSUM_ON_COPY && LWIP_NETIF_TX_SINGLE_PBUF
|
#if LWIP_CHECKSUM_ON_COPY && LWIP_NETIF_TX_SINGLE_PBUF
|
||||||
err = sock->conn->last_err = udp_sendto_chksum(sock->conn->pcb.udp, p,
|
err = sock->conn->last_err = udp_sendto_chksum(sock->conn->pcb.udp, p,
|
||||||
remote_addr, ntohs(to_in->sin_port), 1, chksum);
|
remote_addr, remote_port, 1, chksum);
|
||||||
#else /* LWIP_CHECKSUM_ON_COPY && LWIP_NETIF_TX_SINGLE_PBUF */
|
#else /* LWIP_CHECKSUM_ON_COPY && LWIP_NETIF_TX_SINGLE_PBUF */
|
||||||
err = sock->conn->last_err = udp_sendto(sock->conn->pcb.udp, p,
|
err = sock->conn->last_err = udp_sendto(sock->conn->pcb.udp, p,
|
||||||
remote_addr, ntohs(to_in->sin_port));
|
remote_addr, remote_port);
|
||||||
#endif /* LWIP_CHECKSUM_ON_COPY && LWIP_NETIF_TX_SINGLE_PBUF */
|
#endif /* LWIP_CHECKSUM_ON_COPY && LWIP_NETIF_TX_SINGLE_PBUF */
|
||||||
}
|
}
|
||||||
UNLOCK_TCPIP_CORE();
|
UNLOCK_TCPIP_CORE();
|
||||||
@ -861,7 +867,7 @@ lwip_sendto(int s, const void *data, size_t size, int flags,
|
|||||||
err = ERR_MEM;
|
err = ERR_MEM;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#else
|
#else /* LWIP_TCPIP_CORE_LOCKING */
|
||||||
/* initialize a buffer */
|
/* initialize a buffer */
|
||||||
buf.p = buf.ptr = NULL;
|
buf.p = buf.ptr = NULL;
|
||||||
#if LWIP_CHECKSUM_ON_COPY
|
#if LWIP_CHECKSUM_ON_COPY
|
||||||
|
Loading…
x
Reference in New Issue
Block a user