From 84c7c033638676c6df1d2779b58ab122d5f3342b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tim=20D=C3=BCsterhus?= Date: Tue, 14 Oct 2025 08:36:51 +0200 Subject: [PATCH 1/2] uri: Simplify memory-management in `php_uri_parse()` (#19928) We can try parsing before allocating the `uri_internal_t` struct. --- ext/uri/php_uri.c | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/ext/uri/php_uri.c b/ext/uri/php_uri.c index b15114d09cc22..eb0d105b52c7d 100644 --- a/ext/uri/php_uri.c +++ b/ext/uri/php_uri.c @@ -111,15 +111,16 @@ PHPAPI const php_uri_parser *php_uri_get_parser(zend_string *uri_parser_name) ZEND_ATTRIBUTE_NONNULL PHPAPI php_uri_internal *php_uri_parse(const php_uri_parser *uri_parser, const char *uri_str, size_t uri_str_len, bool silent) { - php_uri_internal *internal_uri = emalloc(sizeof(*internal_uri)); - internal_uri->parser = uri_parser; - internal_uri->uri = uri_parser->parse(uri_str, uri_str_len, NULL, NULL, silent); + void *uri = uri_parser->parse(uri_str, uri_str_len, NULL, NULL, silent); - if (UNEXPECTED(internal_uri->uri == NULL)) { - efree(internal_uri); + if (uri == NULL) { return NULL; } + php_uri_internal *internal_uri = emalloc(sizeof(*internal_uri)); + internal_uri->parser = uri_parser; + internal_uri->uri = uri; + return internal_uri; } From e1240f25df2f56668f8159cf32faa39c7dd5a4a3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tim=20D=C3=BCsterhus?= Date: Tue, 14 Oct 2025 10:20:16 +0200 Subject: [PATCH 2/2] zend_operators: Remove `_zval_get_*()` PHP 7.2 compatibility macros (#20152) These have been unused for long enough and just pollute the symbol namespace. --- UPGRADING.INTERNALS | 4 ++++ Zend/zend_operators.h | 8 -------- 2 files changed, 4 insertions(+), 8 deletions(-) diff --git a/UPGRADING.INTERNALS b/UPGRADING.INTERNALS index ada814964fc5f..eab5ad233be3c 100644 --- a/UPGRADING.INTERNALS +++ b/UPGRADING.INTERNALS @@ -22,6 +22,10 @@ PHP 8.6 INTERNALS UPGRADE NOTES added, given the primary flags were running out of bits. . The zval_is_true() alias of zend_is_true() has been removed. Call zend_is_true() directly instead. + . The _zval_get_*() compatibility macros for PHP 7.2 have been removed + call the variant without the leading underscore instead. + Affected: _zval_get_long, _zval_get_double, _zval_get_string, + _zval_get_long_func, _zval_get_double_func, _zval_get_string_func ======================== 2. Build system changes diff --git a/Zend/zend_operators.h b/Zend/zend_operators.h index 4a74e6ebaefe9..ff31c84c41e5e 100644 --- a/Zend/zend_operators.h +++ b/Zend/zend_operators.h @@ -390,14 +390,6 @@ static zend_always_inline bool try_convert_to_string(zval *op) { return _try_convert_to_string(op); } -/* Compatibility macros for 7.2 and below */ -#define _zval_get_long(op) zval_get_long(op) -#define _zval_get_double(op) zval_get_double(op) -#define _zval_get_string(op) zval_get_string(op) -#define _zval_get_long_func(op) zval_get_long_func(op) -#define _zval_get_double_func(op) zval_get_double_func(op) -#define _zval_get_string_func(op) zval_get_string_func(op) - #define convert_to_string(op) if (Z_TYPE_P(op) != IS_STRING) { _convert_to_string((op)); }