aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFabio Alessandrelli2017-01-19 17:00:01 +0100
committerFabio Alessandrelli2017-03-22 21:11:49 +0100
commit15ecdb5f00da2f19974d70ddd8f2658d9f2f4903 (patch)
treeed6abd04f1d1ef9bf3bfb92761ed8a58b137a476
parent994df5df5c1a0062582d39f944ac1857a4881c00 (diff)
downloadgodot-15ecdb5f00da2f19974d70ddd8f2658d9f2f4903.tar.gz
godot-15ecdb5f00da2f19974d70ddd8f2658d9f2f4903.tar.zst
godot-15ecdb5f00da2f19974d70ddd8f2658d9f2f4903.zip
Fix buffer size check in UDP socket.
We were reserving 12 bytes from the buffer for ip, port, and length, but since IPv6 introduction we should be reserving 24 (IPv6 are 16 bytes) (cherry picked from commit 5dc7c920bf1c4bb160d39e13ad6136d80badd7ae)
-rw-r--r--drivers/unix/packet_peer_udp_posix.cpp2
-rw-r--r--platform/windows/packet_peer_udp_winsock.cpp2
2 files changed, 2 insertions, 2 deletions
diff --git a/drivers/unix/packet_peer_udp_posix.cpp b/drivers/unix/packet_peer_udp_posix.cpp
index f7ca6f834..6dc762f04 100644
--- a/drivers/unix/packet_peer_udp_posix.cpp
+++ b/drivers/unix/packet_peer_udp_posix.cpp
@@ -176,7 +176,7 @@ Error PacketPeerUDPPosix::_poll(bool p_wait) {
struct sockaddr_storage from = { 0 };
socklen_t len = sizeof(struct sockaddr_storage);
int ret;
- while ((ret = recvfrom(sockfd, recv_buffer, MIN((int)sizeof(recv_buffer), MAX(rb.space_left() - 12, 0)), p_wait ? 0 : MSG_DONTWAIT, (struct sockaddr *)&from, &len)) > 0) {
+ while ((ret = recvfrom(sockfd, recv_buffer, MIN((int)sizeof(recv_buffer), MAX(rb.space_left() - 24, 0)), p_wait ? 0 : MSG_DONTWAIT, (struct sockaddr *)&from, &len)) > 0) {
uint32_t port = 0;
diff --git a/platform/windows/packet_peer_udp_winsock.cpp b/platform/windows/packet_peer_udp_winsock.cpp
index 00c317183..38c9d322e 100644
--- a/platform/windows/packet_peer_udp_winsock.cpp
+++ b/platform/windows/packet_peer_udp_winsock.cpp
@@ -171,7 +171,7 @@ Error PacketPeerUDPWinsock::_poll(bool p_wait) {
struct sockaddr_storage from = { 0 };
int len = sizeof(struct sockaddr_storage);
int ret;
- while ((ret = recvfrom(sockfd, (char *)recv_buffer, MIN((int)sizeof(recv_buffer), MAX(rb.space_left() - 12, 0)), 0, (struct sockaddr *)&from, &len)) > 0) {
+ while ((ret = recvfrom(sockfd, (char *)recv_buffer, MIN((int)sizeof(recv_buffer), MAX(rb.space_left() - 24, 0)), 0, (struct sockaddr *)&from, &len)) > 0) {
uint32_t port = 0;