diff --git a/NEWS b/NEWS index d468ec1b74a..c7bd9e834d1 100644 --- a/NEWS +++ b/NEWS @@ -12,6 +12,9 @@ PHP NEWS . Fixed bug GH-18581 (Coerce numeric string keys from iterators when argument unpacking). (ilutov) +- FTP: + . Fix theoretical issues with hrtime() not being available. (nielsdos) + - Hash: . Fix crash on clone failure. (nielsdos) @@ -41,6 +44,7 @@ PHP NEWS - Standard: . Fixed OSS Fuzz #433303828 (Leak in failed unserialize() with opcache). (ilutov) + . Fix theoretical issues with hrtime() not being available. (nielsdos) 31 Jul 2025, PHP 8.4.11 diff --git a/ext/ftp/ftp.c b/ext/ftp/ftp.c index 3dc401a4bff..55a4b951854 100644 --- a/ext/ftp/ftp.c +++ b/ext/ftp/ftp.c @@ -1491,7 +1491,8 @@ static int my_poll(php_socket_t fd, int events, int timeout) { if (n == -1 && php_socket_errno() == EINTR) { zend_hrtime_t delta_ns = zend_hrtime() - start_ns; - if (delta_ns > timeout_hr) { + /* delta_ns == 0 is only possible with a platform that does not support a high-res timer. */ + if (delta_ns > timeout_hr || UNEXPECTED(delta_ns == 0)) { #ifndef PHP_WIN32 errno = ETIMEDOUT; #endif diff --git a/ext/standard/hrtime.c b/ext/standard/hrtime.c index 6af8bfc9650..831e903e1cc 100644 --- a/ext/standard/hrtime.c +++ b/ext/standard/hrtime.c @@ -46,7 +46,6 @@ delivered timestamp is monotonic and cannot be adjusted. */ PHP_FUNCTION(hrtime) { -#if ZEND_HRTIME_AVAILABLE bool get_as_num = 0; zend_hrtime_t t = zend_hrtime(); @@ -55,6 +54,7 @@ PHP_FUNCTION(hrtime) Z_PARAM_BOOL(get_as_num) ZEND_PARSE_PARAMETERS_END(); +#if ZEND_HRTIME_AVAILABLE if (UNEXPECTED(get_as_num)) { PHP_RETURN_HRTIME(t); } else {