summaryrefslogtreecommitdiff
path: root/main/streams
diff options
context:
space:
mode:
authorChristoph M. Becker <cmbecker69@gmx.de>2020-03-11 11:32:46 +0100
committerChristoph M. Becker <cmbecker69@gmx.de>2020-03-11 11:32:46 +0100
commitf078bca729f4ab1bc2d60370e83bfa561f86b88d (patch)
treee65c972046ef154be849d960b7531c8b3c376bc2 /main/streams
parentdcbf020f76a2568b855508c812f68170884398da (diff)
parent8657f0308481263a87d2dd09b8553d58f543a74a (diff)
downloadphp-git-f078bca729f4ab1bc2d60370e83bfa561f86b88d.tar.gz
Merge branch 'PHP-7.4'
* PHP-7.4: Fix #78210: Invalid pointer address
Diffstat (limited to 'main/streams')
-rw-r--r--main/streams/xp_socket.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/main/streams/xp_socket.c b/main/streams/xp_socket.c
index d37b2c30b3..c7cab6353f 100644
--- a/main/streams/xp_socket.c
+++ b/main/streams/xp_socket.c
@@ -276,6 +276,12 @@ static inline int sock_recvfrom(php_netstream_data_t *sock, char *buf, size_t bu
socklen_t sl = sizeof(sa);
ret = recvfrom(sock->socket, buf, XP_SOCK_BUF_SIZE(buflen), flags, (struct sockaddr*)&sa, &sl);
ret = (ret == SOCK_CONN_ERR) ? -1 : ret;
+#ifdef PHP_WIN32
+ /* POSIX discards excess bytes without signalling failure; emulate this on Windows */
+ if (ret == -1 && WSAGetLastError() == WSAEMSGSIZE) {
+ ret = buflen;
+ }
+#endif
if (sl) {
php_network_populate_name_from_sockaddr((struct sockaddr*)&sa, sl,
textaddr, addr, addrlen);