[RFC] Deprecate xml_parser_free() (#19449)

https://wiki.php.net/rfc/deprecations_php_8_5
This commit is contained in:
Daniel Scherzer 2025-08-12 05:44:32 -07:00 committed by GitHub
parent 65c961436d
commit 4de2ec3895
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
33 changed files with 29 additions and 38 deletions

View file

@ -11,7 +11,6 @@ function boom()
$thing = new Thing();
xml_set_object($reader, $thing);
die("ok\n");
xml_parser_free($reader);
}
boom();
?>

View file

@ -30,7 +30,6 @@ function parseXML2($xml) {
function parseXML3($xml) {
$p = xml_parser_create();
xml_parse_into_struct($p, $xml, $vals, $index);
xml_parser_free($p);
return var_export($vals, true);
}

View file

@ -28,7 +28,6 @@ $parser = xml_parser_create_ns("ISO-8859-1","@");
xml_set_element_handler($parser,'start_elem','end_elem');
xml_parser_set_option($parser,XML_OPTION_CASE_FOLDING,0);
xml_parse($parser, $xml);
xml_parser_free($parser);
?>
--EXPECT--
string(24) "http://example.com/foo@a"

View file

@ -7,7 +7,6 @@ xml
$sample = "<?xml version=\"1.0\"?><test attr=\"angle&lt;bracket\"/>";
$parser = xml_parser_create();
$res = xml_parse_into_struct($parser,$sample,$vals,$index);
xml_parser_free($parser);
var_dump($vals);
?>
--EXPECT--

View file

@ -69,5 +69,4 @@ foreach ($xmls as $desc => $xml) {
xml_set_character_data_handler($xml_parser, "characterData");
if (!xml_parse($xml_parser, $xml, true))
echo "Error: ".xml_error_string(xml_get_error_code($xml_parser))."\n";
xml_parser_free($xml_parser);
}

View file

@ -12,7 +12,6 @@ function x_default_handler($xp,$data)
$xp = xml_parser_create();
xml_set_default_handler($xp,'x_default_handler');
xml_parse($xp, '<root></root>',TRUE);
xml_parser_free($xp);
echo "Done\n";
?>
--EXPECT--

View file

@ -14,7 +14,6 @@ XML;
$parser = xml_parser_create();
xml_parse_into_struct($parser, $xml, $vals);
xml_parser_free($parser);
var_dump($vals);
?>
--EXPECT--

View file

@ -24,7 +24,6 @@ END_OF_XML;
$parser = xml_parser_create_ns('UTF-8');
xml_parser_set_option($parser,XML_OPTION_CASE_FOLDING,0);
$result = xml_parse_into_struct($parser, $data, $vals, $index);
xml_parser_free($parser);
var_dump($vals);
?>
--EXPECT--

View file

@ -25,7 +25,6 @@ $parser = xml_parser_create_ns("ISO-8859-1","@");
xml_set_default_handler($parser,'defaultfunc');
xml_parser_set_option($parser,XML_OPTION_CASE_FOLDING,0);
xml_parse($parser, $xml);
xml_parser_free($parser);
?>
--EXPECTF--
<a xmlns="http://example.com/foo"%axmlns:bar="http://example.com/bar">

View file

@ -21,7 +21,6 @@ echo 'Index array' . PHP_EOL;
print_r($index);
echo 'Vals array' . PHP_EOL;
print_r($vals);
xml_parser_free($xml_parser);
function startElement($parser, $name, $attribs) { echo $name . PHP_EOL; }
function endElement($parser, $name) { echo $name . PHP_EOL; }
@ -29,7 +28,6 @@ $xml_parser = xml_parser_create();
xml_set_element_handler($xml_parser, 'startElement', 'endElement');
xml_parser_set_option($xml_parser, XML_OPTION_SKIP_TAGSTART, 4);
xml_parse($xml_parser, $XML);
xml_parser_free($xml_parser);
?>
--EXPECT--

View file

@ -22,8 +22,6 @@ function parse($tagstart) {
xml_parser_set_option($xml_parser, XML_OPTION_SKIP_TAGSTART, $tagstart);
xml_parse($xml_parser, $xml);
xml_parser_free($xml_parser);
}
parse(3015809298423721);

View file

@ -33,4 +33,6 @@ $xml_parser->free();
===DONE===
--EXPECTF--
Deprecated: Function xml_set_object() is deprecated since 8.4, provide a proper method callable to xml_set_*_handler() functions in %s on line %d
Deprecated: Function xml_parser_free() is deprecated since 8.5, as it has no effect since PHP 8.0 in %s on line %d
===DONE===

View file

@ -27,5 +27,6 @@ $object->test();
?>
===DONE===
--EXPECT--
--EXPECTF--
Deprecated: Function xml_parser_free() is deprecated since 8.5, as it has no effect since PHP 8.0 in %s on line %d
===DONE===

View file

@ -42,21 +42,18 @@ echo "Both handlers are trampolines:\n";
$parser = xml_parser_create();
xml_set_element_handler($parser, $startCallback, $endCallback);
xml_parse($parser, $xml, true);
xml_parser_free($parser);
echo "\nStart handler is trampoline, end handler method string:\n";
$parser = xml_parser_create();
xml_set_object($parser, $customParser);
xml_set_element_handler($parser, $startCallback, 'endHandler');
xml_parse($parser, $xml, true);
xml_parser_free($parser);
echo "\nEnd handler is trampoline, start handler method string:\n";
$parser = xml_parser_create();
xml_set_object($parser, $customParser);
xml_set_element_handler($parser, 'startHandler', $endCallback);
xml_parse($parser, $xml, true);
xml_parser_free($parser);
?>
--EXPECTF--

View file

@ -36,7 +36,6 @@ try {
} catch (\Throwable $e) {
echo $e::class, ': ', $e->getMessage(), PHP_EOL;
}
xml_parser_free($parser);
?>
--EXPECT--

View file

@ -24,7 +24,6 @@ HERE;
$parser = xml_parser_create();
xml_set_processing_instruction_handler($parser, $callback);
xml_parse($parser, $xml, true);
xml_parser_free($parser);
?>
--EXPECT--

View file

@ -30,7 +30,6 @@ while ($data = fread($fp, 4096)) {
}
}
print "parse complete\n";
xml_parser_free($xml_parser);
function startElement($parser, $name, $attribs)
{

View file

@ -72,7 +72,6 @@ while ($data = fread($fp, 4096)) {
}
}
print "parse complete\n";
xml_parser_free($xml_parser);
?>
--EXPECT--

View file

@ -71,7 +71,6 @@ while ($data = fread($fp, 4096)) {
}
}
print "parse complete\n";
xml_parser_free($xml_parser);
?>
--EXPECT--
{?[<?xml version="1.0" encoding="ISO-8859-1"?>]}{?[

View file

@ -13,7 +13,6 @@ $fp = fopen("xmltest.xml", "r");
while ($data = fread($fp, 4096)) {
xml_parse($xp, $data, feof($fp));
}
xml_parser_free($xp);
$xp = xml_parser_create();
xml_parser_set_option($xp, XML_OPTION_CASE_FOLDING, true);
xml_set_element_handler($xp, "start_element", "end_element");
@ -21,7 +20,6 @@ $fp = fopen("xmltest.xml", "r");
while ($data = fread($fp, 4096)) {
xml_parse($xp, $data, feof($fp));
}
xml_parser_free($xp);
function start_element($xp, $elem, $attribs)
{

View file

@ -28,7 +28,6 @@ $parser = xml_parser_create_ns("ISO-8859-1","@");
xml_set_element_handler($parser,'start_elem','end_elem');
xml_parser_set_option($parser,XML_OPTION_CASE_FOLDING,0);
xml_parse($parser, $xml);
xml_parser_free($parser);
?>
--EXPECT--
string(24) "http://example.com/foo@a"

View file

@ -32,7 +32,6 @@ $parser = xml_parser_create_ns("ISO-8859-1","@");
xml_set_element_handler($parser,'start_elem','end_elem');
xml_parser_set_option($parser,XML_OPTION_CASE_FOLDING,0);
xml_parse($parser, $xml);
xml_parser_free($parser);
?>
--EXPECT--
http://example.com/foo@a

View file

@ -17,7 +17,6 @@ $xml = '<text>start<b /> This &amp; that</text>';
$parser = xml_parser_create();
xml_parse_into_struct($parser, $xml, $vals, $index);
print_r($vals);
xml_parser_free($parser);
echo "\nChange to empty end handler\n";
$parser = xml_parser_create();
@ -26,7 +25,6 @@ xml_set_element_handler($parser,'start_elem','end_elem');
xml_set_element_handler($parser,'start_elem',NULL);
xml_parse($parser, $xml, TRUE);
xml_parser_free($parser);
echo "\nDone\n";
?>
--EXPECT--

View file

@ -29,7 +29,6 @@ $fp = fopen("xmltest.xml", "r");
while ($data = fread($fp, 4096)) {
xml_parse($xp, $data, feof($fp));
}
xml_parser_free($xp);
?>
--EXPECT--

View file

@ -13,5 +13,4 @@ foreach ($xmls as $xml) {
var_dump(xml_get_error_code($xml_parser));
var_dump(xml_error_string(xml_get_error_code($xml_parser)));
}
xml_parser_free($xml_parser);
}

View file

@ -9,7 +9,6 @@ echo "*** Testing xml_parse_into_struct() : variation ***\n";
$simple = "<main><para><note>simple note</note></para><para><note>simple note</note></para></main>";
$p = xml_parser_create();
xml_parse_into_struct($p, $simple, $vals, $index);
xml_parser_free($p);
echo "Index array\n";
print_r($index);
echo "\nVals array\n";

View file

@ -0,0 +1,15 @@
--TEST--
xml_parser_free() deprecation message
--EXTENSIONS--
xml
--FILE--
<?php
$xp = xml_parser_create();
xml_parse($xp, '<root></root>',TRUE);
xml_parser_free($xp);
echo "Done\n";
?>
--EXPECTF--
Deprecated: Function xml_parser_free() is deprecated since 8.5, as it has no effect since PHP 8.0 in %s on line %d
Done

View file

@ -26,8 +26,6 @@ var_dump(xml_parser_get_option($parser, XML_OPTION_TARGET_ENCODING));
var_dump(xml_parser_set_option($parser, XML_OPTION_TARGET_ENCODING, "US-ASCII"));
var_dump(xml_parser_get_option($parser, XML_OPTION_TARGET_ENCODING));
xml_parser_free( $parser );
echo "Done\n";
?>
--EXPECT--

View file

@ -32,7 +32,6 @@ class XML_Parser
xml_set_notation_decl_handler($parser, $this->notation_decl_handler(...));
xml_set_unparsed_entity_decl_handler($parser, $this->unparsed_entity_decl_handler(...));
xml_parse($parser, $data, true);
xml_parser_free($parser);
}
}

View file

@ -18,7 +18,6 @@ class XML_Parser
$parser = xml_parser_create();
xml_set_processing_instruction_handler($parser, $this->PIHandler(...));
xml_parse($parser, $data, true);
xml_parser_free($parser);
}

View file

@ -14,7 +14,6 @@ var_dump(xml_set_start_namespace_decl_handler( $parser, "Namespace_Start_Handler
var_dump(xml_set_end_namespace_decl_handler( $parser, "Namespace_End_Handler" ));
xml_parse( $parser, $xml, true);
xml_parser_free( $parser );
echo "Done\n";

View file

@ -189,6 +189,7 @@ function xml_get_current_column_number(XMLParser $parser): int {}
function xml_get_current_byte_index(XMLParser $parser): int {}
#[\Deprecated(since: '8.5', message: "as it has no effect since PHP 8.0")]
function xml_parser_free(XMLParser $parser): bool {}
/** @param string|int|bool $value */

11
ext/xml/xml_arginfo.h generated
View file

@ -1,5 +1,5 @@
/* This is a generated file, edit the .stub.php file instead.
* Stub hash: 94b232499672dfd61c2c585a5d1d8a27d1a4a7ce */
* Stub hash: c7838fb209d601be280dfdebfd135906afa36e8c */
ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_xml_parser_create, 0, 0, XMLParser, 0)
ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, encoding, IS_STRING, 1, "null")
@ -125,7 +125,7 @@ static const zend_function_entry ext_functions[] = {
ZEND_FE(xml_get_current_line_number, arginfo_xml_get_current_line_number)
ZEND_FE(xml_get_current_column_number, arginfo_xml_get_current_column_number)
ZEND_FE(xml_get_current_byte_index, arginfo_xml_get_current_byte_index)
ZEND_FE(xml_parser_free, arginfo_xml_parser_free)
ZEND_RAW_FENTRY("xml_parser_free", zif_xml_parser_free, arginfo_xml_parser_free, ZEND_ACC_DEPRECATED, NULL, NULL)
ZEND_FE(xml_parser_set_option, arginfo_xml_parser_set_option)
ZEND_FE(xml_parser_get_option, arginfo_xml_parser_get_option)
ZEND_FE_END
@ -169,6 +169,13 @@ static void register_xml_symbols(int module_number)
zend_string *attribute_Deprecated_func_xml_set_object_0_arg1_str = zend_string_init("provide a proper method callable to xml_set_*_handler() functions", strlen("provide a proper method callable to xml_set_*_handler() functions"), 1);
ZVAL_STR(&attribute_Deprecated_func_xml_set_object_0->args[1].value, attribute_Deprecated_func_xml_set_object_0_arg1_str);
attribute_Deprecated_func_xml_set_object_0->args[1].name = ZSTR_KNOWN(ZEND_STR_MESSAGE);
zend_attribute *attribute_Deprecated_func_xml_parser_free_0 = zend_add_function_attribute(zend_hash_str_find_ptr(CG(function_table), "xml_parser_free", sizeof("xml_parser_free") - 1), ZSTR_KNOWN(ZEND_STR_DEPRECATED_CAPITALIZED), 2);
ZVAL_STR(&attribute_Deprecated_func_xml_parser_free_0->args[0].value, ZSTR_KNOWN(ZEND_STR_8_DOT_5));
attribute_Deprecated_func_xml_parser_free_0->args[0].name = ZSTR_KNOWN(ZEND_STR_SINCE);
zend_string *attribute_Deprecated_func_xml_parser_free_0_arg1_str = zend_string_init("as it has no effect since PHP 8.0", strlen("as it has no effect since PHP 8.0"), 1);
ZVAL_STR(&attribute_Deprecated_func_xml_parser_free_0->args[1].value, attribute_Deprecated_func_xml_parser_free_0_arg1_str);
attribute_Deprecated_func_xml_parser_free_0->args[1].name = ZSTR_KNOWN(ZEND_STR_MESSAGE);
}
static zend_class_entry *register_class_XMLParser(void)