From dbc969c1394640454db73c98333975b7c7e0eef5 Mon Sep 17 00:00:00 2001 From: goldsimon Date: Thu, 20 Apr 2017 22:06:36 +0200 Subject: [PATCH] Try to fix the socket API for sizeof(int) <= 2 by checking INT_MAX at 2 places --- src/api/sockets.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/api/sockets.c b/src/api/sockets.c index 5f1d9c64..d0c5f7e2 100644 --- a/src/api/sockets.c +++ b/src/api/sockets.c @@ -920,6 +920,10 @@ lwip_recv_tcp(struct lwip_sock *sock, void *mem, size_t len, int flags) } else { copylen = (u16_t)recv_left; } + if (recvd + copylen < recvd) { + /* int overflow */ + copylen = INT_MAX - recvd; + } /* copy the contents of the received buffer into the supplied memory pointer mem */ @@ -1487,7 +1491,7 @@ lwip_sendto(int s, const void *data, size_t size, int flags, #endif /* LWIP_TCP */ } - if (size > 0xFFFF) { + if (size > LWIP_MIN(0xFFFF, INT_MAX)) { /* cannot fit into one datagram (at least for us) */ sock_set_errno(sock, EMSGSIZE); done_socket(sock);