From 552ea62e1f88ad09b8838992f332b3eccbef3ba4 Mon Sep 17 00:00:00 2001 From: Niels Dossche <7771979+nielsdos@users.noreply.github.com> Date: Mon, 26 Feb 2024 20:34:27 +0100 Subject: [PATCH] Fix GH-13517: Multiple test failures when building with --with-expat The reflection failure is because the XML extension is used to check the module dependency information, but that extension can be configured to not depend on ext/libxml, resulting in a different output. The solution is to check another extension instead. The test failures in ext/xml/tests are because of different behaviour between libxml2 and Expat error handling. These are expected differences and the solution is to split the tests. Closes GH-13522. --- NEWS | 3 + ext/reflection/tests/016.phpt | 8 +- ext/xml/tests/bug26614.inc | 73 ++++++++++++++++ ext/xml/tests/bug26614.phpt | 83 ++----------------- ext/xml/tests/bug26614_libxml_gte2_11.phpt | 77 +---------------- ext/xml/tests/bug26614_libxml_pre2_11.phpt | 77 +---------------- ext/xml/tests/bug46699.phpt | 4 +- ext/xml/tests/bug81351.phpt | 4 +- ext/xml/tests/libxml_expat_skipif.inc | 9 ++ ..._basic.phpt => xml_error_string_basic.inc} | 19 +---- .../tests/xml_error_string_basic_expat.phpt | 24 ++++++ .../tests/xml_error_string_basic_libxml.phpt | 24 ++++++ ...et_start_namespace_decl_handler_basic.inc} | 18 +--- ...rt_namespace_decl_handler_basic_expat.phpt | 29 +++++++ ...t_namespace_decl_handler_basic_libxml.phpt | 24 ++++++ 15 files changed, 209 insertions(+), 267 deletions(-) create mode 100644 ext/xml/tests/bug26614.inc create mode 100644 ext/xml/tests/libxml_expat_skipif.inc rename ext/xml/tests/{xml_error_string_basic.phpt => xml_error_string_basic.inc} (55%) create mode 100644 ext/xml/tests/xml_error_string_basic_expat.phpt create mode 100644 ext/xml/tests/xml_error_string_basic_libxml.phpt rename ext/xml/tests/{xml_set_start_namespace_decl_handler_basic.phpt => xml_set_start_namespace_decl_handler_basic.inc} (75%) create mode 100644 ext/xml/tests/xml_set_start_namespace_decl_handler_basic_expat.phpt create mode 100644 ext/xml/tests/xml_set_start_namespace_decl_handler_basic_libxml.phpt diff --git a/NEWS b/NEWS index 1564f031f0b2a..ab1364e0d330a 100644 --- a/NEWS +++ b/NEWS @@ -5,6 +5,9 @@ PHP NEWS - PDO: . Fix various PDORow bugs. (Girgias) +- XML: + . Fixed bug GH-13517 (Multiple test failures when building with + --with-expat). (nielsdos) 14 Mar 2024, PHP 8.2.17 diff --git a/ext/reflection/tests/016.phpt b/ext/reflection/tests/016.phpt index a606576708bd9..a1f7ca1a8aa3b 100644 --- a/ext/reflection/tests/016.phpt +++ b/ext/reflection/tests/016.phpt @@ -1,15 +1,17 @@ --TEST-- ReflectionExtension::getDependencies() --EXTENSIONS-- -xml +dom --FILE-- getDependencies(); var_dump($deps); ?> --EXPECT-- -array(1) { +array(2) { ["libxml"]=> string(8) "Required" + ["domxml"]=> + string(9) "Conflicts" } diff --git a/ext/xml/tests/bug26614.inc b/ext/xml/tests/bug26614.inc new file mode 100644 index 0000000000000..1b0c94edb9fbe --- /dev/null +++ b/ext/xml/tests/bug26614.inc @@ -0,0 +1,73 @@ + + + +'; + +// Case 2: replace some characters so that we get comments instead +$xmls["Comment"] =' + + +'; + +// Case 3: replace even more characters so that only textual data is left +$xmls["Text"] =' + +-!-- ATA[ +multi +line +CDATA +block +--- +'; + +function startElement($parser, $name, $attrs) { + printf("<$name> at line %d, col %d (byte %d)\n", + xml_get_current_line_number($parser), + xml_get_current_column_number($parser), + xml_get_current_byte_index($parser)); +} + +function endElement($parser, $name) { + printf(" at line %d, col %d (byte %d)\n", + xml_get_current_line_number($parser), + xml_get_current_column_number($parser), + xml_get_current_byte_index($parser)); +} + +function characterData($parser, $data) { + // dummy +} + +foreach ($xmls as $desc => $xml) { + echo "$desc\n"; + $xml_parser = xml_parser_create(); + xml_set_element_handler($xml_parser, "startElement", "endElement"); + 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); +} diff --git a/ext/xml/tests/bug26614.phpt b/ext/xml/tests/bug26614.phpt index 846d9fc65317e..5fb9f9da4ccec 100644 --- a/ext/xml/tests/bug26614.phpt +++ b/ext/xml/tests/bug26614.phpt @@ -4,91 +4,20 @@ Bug #26614 (CDATA sections skipped on line count) xml --SKIPIF-- --FILE-- - - -'; - -// Case 2: replace some characters so that we get comments instead -$xmls["Comment"] =' - - -'; - -// Case 3: replace even more characters so that only textual data is left -$xmls["Text"] =' - --!-- ATA[ -multi -line -CDATA -block ---- -'; - -function startElement($parser, $name, $attrs) { - printf("<$name> at line %d, col %d (byte %d)\n", - xml_get_current_line_number($parser), - xml_get_current_column_number($parser), - xml_get_current_byte_index($parser)); -} - -function endElement($parser, $name) { - printf(" at line %d, col %d (byte %d)\n", - xml_get_current_line_number($parser), - xml_get_current_column_number($parser), - xml_get_current_byte_index($parser)); -} - -function characterData($parser, $data) { - // dummy -} - -foreach ($xmls as $desc => $xml) { - echo "$desc\n"; - $xml_parser = xml_parser_create(); - xml_set_element_handler($xml_parser, "startElement", "endElement"); - 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); -} +require __DIR__ . '/bug26614.inc'; ?> --EXPECT-- CDATA at line 2, col 0 (byte 45) - at line 9, col 0 (byte 90) + at line 9, col 0 (byte 89) Comment at line 2, col 0 (byte 45) - at line 9, col 0 (byte 90) + at line 9, col 0 (byte 89) Text at line 2, col 0 (byte 45) - at line 9, col 0 (byte 90) + at line 9, col 0 (byte 89) diff --git a/ext/xml/tests/bug26614_libxml_gte2_11.phpt b/ext/xml/tests/bug26614_libxml_gte2_11.phpt index 9a81b67686d14..f494ddc4c50f9 100644 --- a/ext/xml/tests/bug26614_libxml_gte2_11.phpt +++ b/ext/xml/tests/bug26614_libxml_gte2_11.phpt @@ -4,84 +4,13 @@ Bug #26614 (CDATA sections skipped on line count) xml --SKIPIF-- = 2.11'); ?> --FILE-- - - -'; - -// Case 2: replace some characters so that we get comments instead -$xmls["Comment"] =' - - -'; - -// Case 3: replace even more characters so that only textual data is left -$xmls["Text"] =' - --!-- ATA[ -multi -line -CDATA -block ---- -'; - -function startElement($parser, $name, $attrs) { - printf("<$name> at line %d, col %d (byte %d)\n", - xml_get_current_line_number($parser), - xml_get_current_column_number($parser), - xml_get_current_byte_index($parser)); -} - -function endElement($parser, $name) { - printf(" at line %d, col %d (byte %d)\n", - xml_get_current_line_number($parser), - xml_get_current_column_number($parser), - xml_get_current_byte_index($parser)); -} - -function characterData($parser, $data) { - // dummy -} - -foreach ($xmls as $desc => $xml) { - echo "$desc\n"; - $xml_parser = xml_parser_create(); - xml_set_element_handler($xml_parser, "startElement", "endElement"); - 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); -} +require __DIR__ . '/bug26614.inc'; ?> --EXPECTF-- CDATA diff --git a/ext/xml/tests/bug26614_libxml_pre2_11.phpt b/ext/xml/tests/bug26614_libxml_pre2_11.phpt index c581a08e9b8fb..c78f7088e7052 100644 --- a/ext/xml/tests/bug26614_libxml_pre2_11.phpt +++ b/ext/xml/tests/bug26614_libxml_pre2_11.phpt @@ -4,84 +4,13 @@ Bug #26614 (CDATA sections skipped on line count) xml --SKIPIF-- = 21100) die('skip libxml2 test variant for version < 2.11'); ?> --FILE-- - - -'; - -// Case 2: replace some characters so that we get comments instead -$xmls["Comment"] =' - - -'; - -// Case 3: replace even more characters so that only textual data is left -$xmls["Text"] =' - --!-- ATA[ -multi -line -CDATA -block ---- -'; - -function startElement($parser, $name, $attrs) { - printf("<$name> at line %d, col %d (byte %d)\n", - xml_get_current_line_number($parser), - xml_get_current_column_number($parser), - xml_get_current_byte_index($parser)); -} - -function endElement($parser, $name) { - printf(" at line %d, col %d (byte %d)\n", - xml_get_current_line_number($parser), - xml_get_current_column_number($parser), - xml_get_current_byte_index($parser)); -} - -function characterData($parser, $data) { - // dummy -} - -foreach ($xmls as $desc => $xml) { - echo "$desc\n"; - $xml_parser = xml_parser_create(); - xml_set_element_handler($xml_parser, "startElement", "endElement"); - 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); -} +require __DIR__ . '/bug26614.inc'; ?> --EXPECTF-- CDATA diff --git a/ext/xml/tests/bug46699.phpt b/ext/xml/tests/bug46699.phpt index 9570ad9231d2e..b921ab39b7d31 100644 --- a/ext/xml/tests/bug46699.phpt +++ b/ext/xml/tests/bug46699.phpt @@ -27,8 +27,8 @@ xml_parser_set_option($parser,XML_OPTION_CASE_FOLDING,0); xml_parse($parser, $xml); xml_parser_free($parser); ?> ---EXPECT-- - +--EXPECTF-- + 1 2 diff --git a/ext/xml/tests/bug81351.phpt b/ext/xml/tests/bug81351.phpt index 7380a9a937008..319db2ee6877b 100644 --- a/ext/xml/tests/bug81351.phpt +++ b/ext/xml/tests/bug81351.phpt @@ -22,5 +22,5 @@ $error = xml_error_string($code); echo "xml_parse returned $success, xml_get_error_code = $code, xml_error_string = $error\r\n"; ?> --EXPECTF-- -xml_parse returned 1, xml_get_error_code = 0, xml_error_string = No error -%rxml_parse returned 0, xml_get_error_code = 5, xml_error_string = Invalid document end|xml_parse returned 0, xml_get_error_code = 77, xml_error_string = Tag not finished%r +xml_parse returned 1, xml_get_error_code = 0, xml_error_string = %S +%rxml_parse returned 0, xml_get_error_code = 5, xml_error_string = Invalid document end|xml_parse returned 0, xml_get_error_code = 3, xml_error_string = no element found|xml_parse returned 0, xml_get_error_code = 77, xml_error_string = Tag not finished%r diff --git a/ext/xml/tests/libxml_expat_skipif.inc b/ext/xml/tests/libxml_expat_skipif.inc new file mode 100644 index 0000000000000..f8c5ef83db0ad --- /dev/null +++ b/ext/xml/tests/libxml_expat_skipif.inc @@ -0,0 +1,9 @@ +', @@ -19,16 +14,4 @@ foreach ($xmls as $xml) { var_dump(xml_error_string(xml_get_error_code($xml_parser))); } xml_parser_free($xml_parser); -} -?> ---EXPECTF-- -int(%r5|77%r) -string(%d) %r"Invalid document end"|"Tag not finished"%r -int(47) -string(35) "Processing Instruction not finished" -int(57) -string(28) "XML declaration not finished" -int(64) -string(17) "Reserved XML Name" -int(76) -string(14) "Mismatched tag" +} \ No newline at end of file diff --git a/ext/xml/tests/xml_error_string_basic_expat.phpt b/ext/xml/tests/xml_error_string_basic_expat.phpt new file mode 100644 index 0000000000000..c095efa8e844e --- /dev/null +++ b/ext/xml/tests/xml_error_string_basic_expat.phpt @@ -0,0 +1,24 @@ +--TEST-- +xml_error_string() - Basic test on 5 error codes +--EXTENSIONS-- +xml +--SKIPIF-- + +--FILE-- + +--EXPECT-- +int(3) +string(16) "no element found" +int(4) +string(31) "not well-formed (invalid token)" +int(5) +string(14) "unclosed token" +int(30) +string(31) "XML declaration not well-formed" +int(7) +string(14) "mismatched tag" diff --git a/ext/xml/tests/xml_error_string_basic_libxml.phpt b/ext/xml/tests/xml_error_string_basic_libxml.phpt new file mode 100644 index 0000000000000..aafd005cb4a3c --- /dev/null +++ b/ext/xml/tests/xml_error_string_basic_libxml.phpt @@ -0,0 +1,24 @@ +--TEST-- +xml_error_string() - Basic test on 5 error codes +--EXTENSIONS-- +xml +--SKIPIF-- + +--FILE-- + +--EXPECTF-- +int(%r5|77%r) +string(%d) %r"Invalid document end"|"Tag not finished"%r +int(47) +string(35) "Processing Instruction not finished" +int(57) +string(28) "XML declaration not finished" +int(64) +string(17) "Reserved XML Name" +int(76) +string(14) "Mismatched tag" diff --git a/ext/xml/tests/xml_set_start_namespace_decl_handler_basic.phpt b/ext/xml/tests/xml_set_start_namespace_decl_handler_basic.inc similarity index 75% rename from ext/xml/tests/xml_set_start_namespace_decl_handler_basic.phpt rename to ext/xml/tests/xml_set_start_namespace_decl_handler_basic.inc index a13e0c22939b8..b27b5c0efeb48 100644 --- a/ext/xml/tests/xml_set_start_namespace_decl_handler_basic.phpt +++ b/ext/xml/tests/xml_set_start_namespace_decl_handler_basic.inc @@ -1,8 +1,3 @@ ---TEST-- -Test xml_set_start_namespace_decl_handler function: basic ---EXTENSIONS-- -xml ---FILE-- ' ); -} -?> ---EXPECT-- -bool(true) -bool(true) -Namespace_Start_Handler called -...Prefix: aw1 -...Uri: http://www.somewhere.com/namespace1 -Namespace_Start_Handler called -...Prefix: aw2 -...Uri: file:/DTD/somewhere.dtd -Done +} \ No newline at end of file diff --git a/ext/xml/tests/xml_set_start_namespace_decl_handler_basic_expat.phpt b/ext/xml/tests/xml_set_start_namespace_decl_handler_basic_expat.phpt new file mode 100644 index 0000000000000..34babe4d30f67 --- /dev/null +++ b/ext/xml/tests/xml_set_start_namespace_decl_handler_basic_expat.phpt @@ -0,0 +1,29 @@ +--TEST-- +Test xml_set_start_namespace_decl_handler function: basic +--EXTENSIONS-- +xml +--SKIPIF-- + +--FILE-- + +--EXPECT-- +bool(true) +bool(true) +Namespace_Start_Handler called +...Prefix: aw1 +...Uri: http://www.somewhere.com/namespace1 +Namespace_Start_Handler called +...Prefix: aw2 +...Uri: file:/DTD/somewhere.dtd +Namespace_End_Handler called +...Prefix: aw2 + +Namespace_End_Handler called +...Prefix: aw1 + +Done diff --git a/ext/xml/tests/xml_set_start_namespace_decl_handler_basic_libxml.phpt b/ext/xml/tests/xml_set_start_namespace_decl_handler_basic_libxml.phpt new file mode 100644 index 0000000000000..ff6057c075d55 --- /dev/null +++ b/ext/xml/tests/xml_set_start_namespace_decl_handler_basic_libxml.phpt @@ -0,0 +1,24 @@ +--TEST-- +Test xml_set_start_namespace_decl_handler function: basic +--EXTENSIONS-- +xml +--SKIPIF-- + +--FILE-- + +--EXPECT-- +bool(true) +bool(true) +Namespace_Start_Handler called +...Prefix: aw1 +...Uri: http://www.somewhere.com/namespace1 +Namespace_Start_Handler called +...Prefix: aw2 +...Uri: file:/DTD/somewhere.dtd +Done