From c03215b62325148fb342cec5fea897bc9e5c202c Mon Sep 17 00:00:00 2001 From: Theodore Brown Date: Mon, 20 Oct 2025 03:29:54 -0500 Subject: [PATCH 1/3] Fix missing deprecation message for default case statement followed by semicolon (#20172) Follow-up to GH-19215 --- NEWS | 2 ++ Zend/zend_compile.c | 10 +++++----- tests/lang/033.phpt | 2 ++ 3 files changed, 9 insertions(+), 5 deletions(-) diff --git a/NEWS b/NEWS index ac12a8098b7..08daf17d219 100644 --- a/NEWS +++ b/NEWS @@ -6,6 +6,8 @@ PHP NEWS . Fixed bug GH-20113 (Missing new Foo(...) error in constant expressions). (ilutov) . Fixed bug GH-19844 (Don't bail when closing resources on shutdown). (ilutov) + . Fixed deprecation for default case statement followed by semicolon not + being emitted. (theodorejb) - DOM: . Fix getNamedItemNS() incorrect namespace check. (nielsdos) diff --git a/Zend/zend_compile.c b/Zend/zend_compile.c index 8d6ca5a6434..35228722aa9 100644 --- a/Zend/zend_compile.c +++ b/Zend/zend_compile.c @@ -6333,6 +6333,11 @@ static void zend_compile_switch(zend_ast *ast) /* {{{ */ zend_ast *cond_ast = case_ast->child[0]; znode cond_node; + if (case_ast->attr == ZEND_ALT_CASE_SYNTAX) { + CG(zend_lineno) = case_ast->lineno; + zend_error(E_DEPRECATED, "Case statements followed by a semicolon (;) are deprecated, use a colon (:) instead"); + } + if (!cond_ast) { if (has_default_case) { CG(zend_lineno) = case_ast->lineno; @@ -6343,11 +6348,6 @@ static void zend_compile_switch(zend_ast *ast) /* {{{ */ continue; } - if (case_ast->attr == ZEND_ALT_CASE_SYNTAX) { - CG(zend_lineno) = case_ast->lineno; - zend_error(E_DEPRECATED, "Case statements followed by a semicolon (;) are deprecated, use a colon (:) instead"); - } - zend_compile_expr(&cond_node, cond_ast); if (expr_node.op_type == IS_CONST diff --git a/tests/lang/033.phpt b/tests/lang/033.phpt index 41424e40489..a8a5837a550 100644 --- a/tests/lang/033.phpt +++ b/tests/lang/033.phpt @@ -38,6 +38,8 @@ switch ($a): endswitch; ?> --EXPECTF-- +Deprecated: Case statements followed by a semicolon (;) are deprecated, use a colon (:) instead in %s + Deprecated: Case statements followed by a semicolon (;) are deprecated, use a colon (:) instead in %s If: 11 While: 12346789 From 3ac9efe41536dc41a02e7eee9465051c599327a2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tim=20D=C3=BCsterhus?= Date: Mon, 20 Oct 2025 10:30:20 +0200 Subject: [PATCH 2/3] uri: Make uri_parser_rfc3986.h usable for external extensions (#20173) This header could not previously be used due to the `uriparser/Uri.h` include, which is required for the struct definition. Since this struct is considered an implementation detail, we can just make it opaque, preserving type safety, but without allowing external users to touch its contents. Fixes php/php-src#19868. --- NEWS | 2 ++ ext/uri/uri_parser_rfc3986.c | 8 ++++++++ ext/uri/uri_parser_rfc3986.h | 7 +------ 3 files changed, 11 insertions(+), 6 deletions(-) diff --git a/NEWS b/NEWS index 08daf17d219..908838a60db 100644 --- a/NEWS +++ b/NEWS @@ -48,6 +48,8 @@ PHP NEWS - URI: . Fixed bug GH-20088 (Heap-use-after-free in PHP URI WHATWG parser during malformed URL processing). (lexborisov) + . Fixed bug GH-19868 (Unable to use uri_parser_rfc3986.h from external + extensions). (timwolla) 09 Oct 2025, PHP 8.5.0RC2 diff --git a/ext/uri/uri_parser_rfc3986.c b/ext/uri/uri_parser_rfc3986.c index 24dd4e1947b..628b73b123f 100644 --- a/ext/uri/uri_parser_rfc3986.c +++ b/ext/uri/uri_parser_rfc3986.c @@ -20,6 +20,14 @@ #include "Zend/zend_smart_str.h" #include "Zend/zend_exceptions.h" +#include + +struct php_uri_parser_rfc3986_uris { + UriUriA uri; + UriUriA normalized_uri; + bool normalized_uri_initialized; +}; + static void *php_uri_parser_rfc3986_memory_manager_malloc(UriMemoryManager *memory_manager, size_t size) { return emalloc(size); diff --git a/ext/uri/uri_parser_rfc3986.h b/ext/uri/uri_parser_rfc3986.h index bdf792816c2..b6d42441db7 100644 --- a/ext/uri/uri_parser_rfc3986.h +++ b/ext/uri/uri_parser_rfc3986.h @@ -17,16 +17,11 @@ #ifndef PHP_URI_PARSER_RFC3986_H #define PHP_URI_PARSER_RFC3986_H -#include #include "php_uri_common.h" extern const php_uri_parser php_uri_parser_rfc3986; -typedef struct php_uri_parser_rfc3986_uris { - UriUriA uri; - UriUriA normalized_uri; - bool normalized_uri_initialized; -} php_uri_parser_rfc3986_uris; +typedef struct php_uri_parser_rfc3986_uris php_uri_parser_rfc3986_uris; zend_result php_uri_parser_rfc3986_userinfo_read(void *uri, php_uri_component_read_mode read_mode, zval *retval); zend_result php_uri_parser_rfc3986_userinfo_write(void *uri, zval *value, zval *errors); From cea52f796e8339023a452277f7de0cd7e6c2a8eb Mon Sep 17 00:00:00 2001 From: Juliette <663378+jrfnl@users.noreply.github.com> Date: Mon, 20 Oct 2025 10:32:05 +0200 Subject: [PATCH 3/3] PHP 8.5 | UPGRADING: fix entry about new grapheme $locale parameter (#20239) * PHP 8.5 | UPGRADING: fix entry about new grapheme $locale parameter 1. The `grapheme_levenshtein()` function is new to PHP 8.5, so the `$locale` parameter being added does not "change" the function (in the context of changes between PHP 8.4 and 8.5). 2. The `grapheme_substr()` function has also been given the new `$locale` parameter, but was not listed in the changelog entry. Refs: * https://wiki.php.net/rfc/grapheme_levenshtein * https://github.com/php/php-src/commit/bdcea111f30fee395d5830505df5de58598abb5e * https://wiki.php.net/rfc/grapheme_add_locale_for_case_insensitive * https://github.com/php/php-src/commit/ad75c260442d93dc0aeb6857407387d4f871b5d6 * NEWS: Add missing parentheses after `grapheme_substr` Co-authored-by: tekimen --- NEWS | 2 +- UPGRADING | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/NEWS b/NEWS index 908838a60db..3f6c29d7a59 100644 --- a/NEWS +++ b/NEWS @@ -217,7 +217,7 @@ PHP NEWS - Intl: . Added grapheme_strpos(), grapheme_stripos(), grapheme_strrpos(), - grapheme_strripos(), grapheme_strstr(), grapheme_stristr() and + grapheme_strripos(), grapheme_substr(), grapheme_strstr(), grapheme_stristr() and grapheme_levenshtein() functions add $locale parameter (Yuya Hamada). . Fixed bug GH-11952 (Fix locale strings canonicalization for IntlDateFormatter and NumberFormatter). (alexandre-daubois) diff --git a/UPGRADING b/UPGRADING index e58d2875832..b60c9b49d71 100644 --- a/UPGRADING +++ b/UPGRADING @@ -613,8 +613,8 @@ PHP 8.5 UPGRADE NOTES have dropped the false from the return type union. Returning false was actually never possible. . grapheme_strpos(), grapheme_stripos(), grapheme_strrpos(), - grapheme_strripos(), grapheme_strstr(), grapheme_stristr() and - grapheme_levenshtein() functions add $locale parameter. + grapheme_strripos(), grapheme_substr(), grapheme_strstr() + and grapheme_stristr() functions add $locale parameter. RFC: https://wiki.php.net/rfc/grapheme_add_locale_for_case_insensitive - LDAP: