Skip to content

Commit f078bca

Browse files
committed
Merge branch 'PHP-7.4'
* PHP-7.4: Fix #78210: Invalid pointer address
2 parents dcbf020 + 8657f03 commit f078bca

File tree

3 files changed

+11
-3
lines changed

3 files changed

+11
-3
lines changed

ext/standard/streamsfuncs.c

+1-1
Original file line numberDiff line numberDiff line change
@@ -352,7 +352,7 @@ PHP_FUNCTION(stream_socket_sendto)
352352
}
353353
}
354354

355-
RETURN_LONG(php_stream_xport_sendto(stream, data, datalen, (int)flags, target_addr ? &sa : NULL, sl));
355+
RETURN_LONG(php_stream_xport_sendto(stream, data, datalen, (int)flags, target_addr_len ? &sa : NULL, sl));
356356
}
357357
/* }}} */
358358

main/network.c

+4-2
Original file line numberDiff line numberDiff line change
@@ -511,9 +511,11 @@ PHPAPI int php_network_parse_network_address_with_port(const char *addr, zend_lo
511511
zend_string *errstr = NULL;
512512
#if HAVE_IPV6
513513
struct sockaddr_in6 *in6 = (struct sockaddr_in6*)sa;
514-
#endif
515514

516-
memset(sa, 0, sizeof(struct sockaddr));
515+
memset(in6, 0, sizeof(struct sockaddr_in6));
516+
#else
517+
memset(in4, 0, sizeof(struct sockaddr_in));
518+
#endif
517519

518520
if (*addr == '[') {
519521
colon = memchr(addr + 1, ']', addrlen-1);

main/streams/xp_socket.c

+6
Original file line numberDiff line numberDiff line change
@@ -276,6 +276,12 @@ static inline int sock_recvfrom(php_netstream_data_t *sock, char *buf, size_t bu
276276
socklen_t sl = sizeof(sa);
277277
ret = recvfrom(sock->socket, buf, XP_SOCK_BUF_SIZE(buflen), flags, (struct sockaddr*)&sa, &sl);
278278
ret = (ret == SOCK_CONN_ERR) ? -1 : ret;
279+
#ifdef PHP_WIN32
280+
/* POSIX discards excess bytes without signalling failure; emulate this on Windows */
281+
if (ret == -1 && WSAGetLastError() == WSAEMSGSIZE) {
282+
ret = buflen;
283+
}
284+
#endif
279285
if (sl) {
280286
php_network_populate_name_from_sockaddr((struct sockaddr*)&sa, sl,
281287
textaddr, addr, addrlen);

0 commit comments

Comments
 (0)