소스 검색

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)
Fabio Alessandrelli 8 년 전
부모
커밋
15ecdb5f00
2개의 변경된 파일2개의 추가작업 그리고 2개의 파일을 삭제
  1. 1 1
      drivers/unix/packet_peer_udp_posix.cpp
  2. 1 1
      platform/windows/packet_peer_udp_winsock.cpp

+ 1 - 1
drivers/unix/packet_peer_udp_posix.cpp

@@ -176,7 +176,7 @@ Error PacketPeerUDPPosix::_poll(bool p_wait) {
 	struct sockaddr_storage from = { 0 };
 	struct sockaddr_storage from = { 0 };
 	socklen_t len = sizeof(struct sockaddr_storage);
 	socklen_t len = sizeof(struct sockaddr_storage);
 	int ret;
 	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;
 		uint32_t port = 0;
 
 

+ 1 - 1
platform/windows/packet_peer_udp_winsock.cpp

@@ -171,7 +171,7 @@ Error PacketPeerUDPWinsock::_poll(bool p_wait) {
 	struct sockaddr_storage from = { 0 };
 	struct sockaddr_storage from = { 0 };
 	int len = sizeof(struct sockaddr_storage);
 	int len = sizeof(struct sockaddr_storage);
 	int ret;
 	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;
 		uint32_t port = 0;