From f7fb13eb07e8a75c1ed24dcf4edb177879c24f5d Mon Sep 17 00:00:00 2001 From: Ilija Tovilo Date: Tue, 2 Dec 2025 16:26:50 +0100 Subject: [PATCH 1/8] Suppress libxml deprecations Closes GH-20538 --- ext/dom/document.c | 12 ++++++++++++ ext/libxml/libxml.c | 5 +++++ 2 files changed, 17 insertions(+) diff --git a/ext/dom/document.c b/ext/dom/document.c index 431d69a89dcf..15b5d98131c1 100644 --- a/ext/dom/document.c +++ b/ext/dom/document.c @@ -1437,12 +1437,16 @@ PHP_METHOD(DOMDocument, save) doc_props = dom_get_doc_props(intern->document); format = doc_props->formatoutput; if (options & LIBXML_SAVE_NOEMPTYTAG) { + ZEND_DIAGNOSTIC_IGNORED_START("-Wdeprecated-declarations") saveempty = xmlSaveNoEmptyTags; xmlSaveNoEmptyTags = 1; + ZEND_DIAGNOSTIC_IGNORED_END } bytes = xmlSaveFormatFileEnc(file, docp, NULL, format); if (options & LIBXML_SAVE_NOEMPTYTAG) { + ZEND_DIAGNOSTIC_IGNORED_START("-Wdeprecated-declarations") xmlSaveNoEmptyTags = saveempty; + ZEND_DIAGNOSTIC_IGNORED_END } if (bytes == -1) { RETURN_FALSE; @@ -1489,12 +1493,16 @@ PHP_METHOD(DOMDocument, saveXML) RETURN_FALSE; } if (options & LIBXML_SAVE_NOEMPTYTAG) { + ZEND_DIAGNOSTIC_IGNORED_START("-Wdeprecated-declarations") saveempty = xmlSaveNoEmptyTags; xmlSaveNoEmptyTags = 1; + ZEND_DIAGNOSTIC_IGNORED_END } xmlNodeDump(buf, docp, node, 0, format); if (options & LIBXML_SAVE_NOEMPTYTAG) { + ZEND_DIAGNOSTIC_IGNORED_START("-Wdeprecated-declarations") xmlSaveNoEmptyTags = saveempty; + ZEND_DIAGNOSTIC_IGNORED_END } mem = (xmlChar*) xmlBufferContent(buf); if (!mem) { @@ -1505,13 +1513,17 @@ PHP_METHOD(DOMDocument, saveXML) xmlBufferFree(buf); } else { if (options & LIBXML_SAVE_NOEMPTYTAG) { + ZEND_DIAGNOSTIC_IGNORED_START("-Wdeprecated-declarations") saveempty = xmlSaveNoEmptyTags; xmlSaveNoEmptyTags = 1; + ZEND_DIAGNOSTIC_IGNORED_END } /* Encoding is handled from the encoding property set on the document */ xmlDocDumpFormatMemory(docp, &mem, &size, format); if (options & LIBXML_SAVE_NOEMPTYTAG) { + ZEND_DIAGNOSTIC_IGNORED_START("-Wdeprecated-declarations") xmlSaveNoEmptyTags = saveempty; + ZEND_DIAGNOSTIC_IGNORED_END } if (!size || !mem) { RETURN_FALSE; diff --git a/ext/libxml/libxml.c b/ext/libxml/libxml.c index 3311346d4bcf..f60aa1bf76b6 100644 --- a/ext/libxml/libxml.c +++ b/ext/libxml/libxml.c @@ -429,9 +429,11 @@ php_libxml_input_buffer_create_filename(const char *URI, xmlCharEncoding enc) /* Allocate the Input buffer front-end. */ ret = xmlAllocParserInputBuffer(enc); if (ret != NULL) { + ZEND_DIAGNOSTIC_IGNORED_START("-Wdeprecated-declarations") ret->context = context; ret->readcallback = php_libxml_streams_IO_read; ret->closecallback = php_libxml_streams_IO_close; + ZEND_DIAGNOSTIC_IGNORED_END } else php_libxml_streams_IO_close(context); @@ -679,9 +681,12 @@ static xmlParserInputPtr _php_libxml_external_entity_loader(const char *URL, } else { /* make stream not being closed when the zval is freed */ GC_ADDREF(stream->res); + + ZEND_DIAGNOSTIC_IGNORED_START("-Wdeprecated-declarations") pib->context = stream; pib->readcallback = php_libxml_streams_IO_read; pib->closecallback = php_libxml_streams_IO_close; + ZEND_DIAGNOSTIC_IGNORED_END ret = xmlNewIOInputStream(context, pib, enc); if (ret == NULL) { From bd67ba66a892ea63cd70c9a7fec72c7094183037 Mon Sep 17 00:00:00 2001 From: Niels Dossche <7771979+ndossche@users.noreply.github.com> Date: Thu, 6 Nov 2025 22:42:03 +0100 Subject: [PATCH 2/8] dom: Fix compile warning due to misplaced const cast --- ext/dom/document.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ext/dom/document.c b/ext/dom/document.c index 15b5d98131c1..5f06f8dc2a80 100644 --- a/ext/dom/document.c +++ b/ext/dom/document.c @@ -1120,7 +1120,7 @@ PHP_METHOD(DOMDocument, __construct) } if (encoding_len > 0) { - docp->encoding = (const xmlChar *) xmlStrdup((xmlChar *) encoding); + docp->encoding = xmlStrdup((const xmlChar *) encoding); } intern = Z_DOMOBJ_P(ZEND_THIS); From e10f6d702f7e5167ec63215efe9def4deb94ef84 Mon Sep 17 00:00:00 2001 From: Eric Mann Date: Tue, 2 Dec 2025 09:05:38 -0800 Subject: [PATCH 3/8] PHP-8.3 is now for PHP 8.3.30-dev --- NEWS | 5 ++++- Zend/zend.h | 2 +- configure.ac | 2 +- main/php_version.h | 6 +++--- 4 files changed, 9 insertions(+), 6 deletions(-) diff --git a/NEWS b/NEWS index ff4eb04e5b66..a439bfc2ad66 100644 --- a/NEWS +++ b/NEWS @@ -1,6 +1,9 @@ PHP NEWS ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| -?? ??? ????, PHP 8.3.29 +?? ??? ????, PHP 8.3.30 + + +18 Dec 2025, PHP 8.3.29 - Core: . Sync all boost.context files with release 1.86.0. (mvorisek) diff --git a/Zend/zend.h b/Zend/zend.h index 9f57b50997a0..6655c9e09ad8 100644 --- a/Zend/zend.h +++ b/Zend/zend.h @@ -20,7 +20,7 @@ #ifndef ZEND_H #define ZEND_H -#define ZEND_VERSION "4.3.29-dev" +#define ZEND_VERSION "4.3.30-dev" #define ZEND_ENGINE_3 diff --git a/configure.ac b/configure.ac index cb5f4e705722..f11e3c9f56fe 100644 --- a/configure.ac +++ b/configure.ac @@ -17,7 +17,7 @@ dnl Basic autoconf initialization, generation of config.nice. dnl ---------------------------------------------------------------------------- AC_PREREQ([2.68]) -AC_INIT([PHP],[8.3.29-dev],[https://github.com/php/php-src/issues],[php],[https://www.php.net]) +AC_INIT([PHP],[8.3.30-dev],[https://github.com/php/php-src/issues],[php],[https://www.php.net]) AC_CONFIG_SRCDIR([main/php_version.h]) AC_CONFIG_AUX_DIR([build]) AC_PRESERVE_HELP_ORDER diff --git a/main/php_version.h b/main/php_version.h index d9bd5c65f21c..10a9cd7c6afa 100644 --- a/main/php_version.h +++ b/main/php_version.h @@ -2,7 +2,7 @@ /* edit configure.ac to change version number */ #define PHP_MAJOR_VERSION 8 #define PHP_MINOR_VERSION 3 -#define PHP_RELEASE_VERSION 29 +#define PHP_RELEASE_VERSION 30 #define PHP_EXTRA_VERSION "-dev" -#define PHP_VERSION "8.3.29-dev" -#define PHP_VERSION_ID 80329 +#define PHP_VERSION "8.3.30-dev" +#define PHP_VERSION_ID 80330 From 903fcb45c35c36857840ec7e2c5be4b3c4e0b6e9 Mon Sep 17 00:00:00 2001 From: Niels Dossche <7771979+nielsdos@users.noreply.github.com> Date: Mon, 19 May 2025 19:10:27 +0200 Subject: [PATCH 4/8] Fix deprecation warning for libxml SAX header (#18594) This header is deprecated, but fortunately it isn't actually used. --- ext/dom/document.c | 1 - 1 file changed, 1 deletion(-) diff --git a/ext/dom/document.c b/ext/dom/document.c index 5f06f8dc2a80..1987cc38320b 100644 --- a/ext/dom/document.c +++ b/ext/dom/document.c @@ -22,7 +22,6 @@ #include "php.h" #if defined(HAVE_LIBXML) && defined(HAVE_DOM) #include "php_dom.h" -#include #include #ifdef LIBXML_SCHEMAS_ENABLED #include From dd2179433c0b85a5a841ab6658781f6339b85376 Mon Sep 17 00:00:00 2001 From: Niels Dossche <7771979+ndossche@users.noreply.github.com> Date: Tue, 2 Dec 2025 20:09:31 +0100 Subject: [PATCH 5/8] xml: Backport more deprecation fixes --- ext/xml/compat.c | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/ext/xml/compat.c b/ext/xml/compat.c index 6bd69bec1961..18a7beaea2d3 100644 --- a/ext/xml/compat.c +++ b/ext/xml/compat.c @@ -473,13 +473,13 @@ XML_ParserCreate_MM(const XML_Char *encoding, const XML_Memory_Handling_Suite *m } php_libxml_sanitize_parse_ctxt_options(parser->parser); - xmlCtxtUseOptions(parser->parser, XML_PARSE_OLDSAX); + xmlCtxtUseOptions(parser->parser, XML_PARSE_OLDSAX | XML_PARSE_NOENT); - parser->parser->replaceEntities = 1; parser->parser->wellFormed = 0; if (sep != NULL) { + /* Note: sax2 flag will be set due to the magic number in `initialized` in php_xml_compat_handlers */ + ZEND_ASSERT(parser->parser->sax->initialized == XML_SAX2_MAGIC); parser->use_namespace = 1; - parser->parser->sax2 = 1; parser->_ns_separator = xmlStrdup(sep); } else { /* Reset flag as XML_SAX2_MAGIC is needed for xmlCreatePushParserCtxt @@ -565,10 +565,14 @@ XML_SetEndNamespaceDeclHandler(XML_Parser parser, XML_EndNamespaceDeclHandler en PHP_XML_API int XML_Parse(XML_Parser parser, const XML_Char *data, int data_len, int is_final) { - int error; + int error = xmlParseChunk(parser->parser, (char *) data, data_len, is_final); - error = xmlParseChunk(parser->parser, (char *) data, data_len, is_final); - return !error && parser->parser->lastError.level <= XML_ERR_WARNING; + if (!error) { + const xmlError *error_data = xmlCtxtGetLastError(parser->parser); + return !error_data || error_data->level <= XML_ERR_WARNING; + } + + return 0; } PHP_XML_API int From ad867ce651512fd53df0d60dd2f52a5a8d38c12c Mon Sep 17 00:00:00 2001 From: Niels Dossche <7771979+ndossche@users.noreply.github.com> Date: Tue, 2 Dec 2025 11:48:24 -0800 Subject: [PATCH 6/8] Tweak values for test on Windows (#20633) --- ext/standard/tests/http/http_build_query/gh20583.phpt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ext/standard/tests/http/http_build_query/gh20583.phpt b/ext/standard/tests/http/http_build_query/gh20583.phpt index c0331a830b1e..5ea0dbe9006b 100644 --- a/ext/standard/tests/http/http_build_query/gh20583.phpt +++ b/ext/standard/tests/http/http_build_query/gh20583.phpt @@ -10,11 +10,11 @@ if (getenv('SKIP_ASAN')) { } ?> --INI-- -zend.max_allowed_stack_size=512K +zend.max_allowed_stack_size=128K --FILE-- $a]; } try { From 688902d4553d9f483fd07a1343e419b705c77dad Mon Sep 17 00:00:00 2001 From: Niels Dossche <7771979+ndossche@users.noreply.github.com> Date: Tue, 2 Dec 2025 20:52:20 +0100 Subject: [PATCH 7/8] dom: Backport test for libxml changes --- ext/dom/tests/gh10234.phpt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/ext/dom/tests/gh10234.phpt b/ext/dom/tests/gh10234.phpt index 5edc8fc6c1ff..11d39cd625a7 100644 --- a/ext/dom/tests/gh10234.phpt +++ b/ext/dom/tests/gh10234.phpt @@ -55,7 +55,7 @@ $document->documentElement->textContent = "quote 'test'"; var_dump($document->documentElement->textContent); var_dump($document->saveHTML()); ?> ---EXPECT-- +--EXPECTF-- -- Attribute tests -- string(38) " " @@ -67,10 +67,10 @@ string(13) "hello & world" string(50) " " string(9) "hi" -string(54) " +string(%d) "hi<\/b>")%r> " string(12) "quote "test"" -string(45) " +string(%d) " " string(12) "quote 'test'" string(45) " From 2b04e0831adc687a4a9666b9ec78fcdfd50c25af Mon Sep 17 00:00:00 2001 From: Niels Dossche <7771979+ndossche@users.noreply.github.com> Date: Tue, 2 Dec 2025 20:59:26 +0100 Subject: [PATCH 8/8] intl: Fix tests for icu update --- ext/intl/tests/msgfmt_format_intlcalendar_variant4.phpt | 4 ++-- ext/intl/tests/timezone_getDisplayName_variant4.phpt | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/ext/intl/tests/msgfmt_format_intlcalendar_variant4.phpt b/ext/intl/tests/msgfmt_format_intlcalendar_variant4.phpt index be470d3d0d30..f434985cd08c 100644 --- a/ext/intl/tests/msgfmt_format_intlcalendar_variant4.phpt +++ b/ext/intl/tests/msgfmt_format_intlcalendar_variant4.phpt @@ -29,5 +29,5 @@ echo "msgf2: ", $msgf->format(array($time, 'date')), " ", */ ?> ---EXPECT-- -quinta-feira, 17 de maio de 2012 5:35:36 da tarde ptlis +--EXPECTF-- +quinta-feira, 17 de maio de 2012 5:35:36 %r(da tarde|p.m.)%r ptlis diff --git a/ext/intl/tests/timezone_getDisplayName_variant4.phpt b/ext/intl/tests/timezone_getDisplayName_variant4.phpt index 4bab07c744fa..d3e83d92a1a7 100644 --- a/ext/intl/tests/timezone_getDisplayName_variant4.phpt +++ b/ext/intl/tests/timezone_getDisplayName_variant4.phpt @@ -23,12 +23,12 @@ var_dump($lsb->getDisplayName(false, IntlTimeZone::DISPLAY_SHORT_COMMONLY_USED)) var_dump($lsb->getDisplayName(false, IntlTimeZone::DISPLAY_GENERIC_LOCATION)); ?> ---EXPECT-- -string(3) "GMT" +--EXPECTF-- +string(%d) "%r(GMT|GMT\+0)%r" string(30) "Western European Standard Time" string(13) "Portugal Time" string(21) "Western European Time" string(5) "+0000" -string(3) "GMT" -string(3) "GMT" +string(%d) "%r(GMT|GMT\+00:00)%r" +string(%d) "%r(GMT|GMT\+0)%r" string(13) "Portugal Time"