Make WordPress Core

Opened 8 months ago

Closed 8 months ago

#63977 closed defect (bug) (fixed)

PHP 8.5: Interactivity API: Cannot use bool as array

Reported by: swissspidy's profile swissspidy Owned by: swissspidy's profile swissspidy
Milestone: 6.9 Priority: normal
Severity: normal Version:
Component: Interactivity API Keywords: php85 has-patch
Focuses: php-compatibility Cc:

Description

Parent ticket for all things PHP 8.5: #63061


Here's the error output when running unit tests against PHP 8.5:

4) Tests_Interactivity_API_WpInteractivityAPI::test_process_directives_doesnt_change_html_if_contains_unbalanced_tags with data set "DIV closer after" ('<div data-wp-bind--id="myPlug...</div>')
Cannot use bool as array

/var/www/src/wp-includes/interactivity-api/class-wp-interactivity-api.php:426
/var/www/src/wp-includes/interactivity-api/class-wp-interactivity-api.php:370
/var/www/tests/phpunit/tests/interactivity-api/wpInteractivityAPI.php:823
/var/www/vendor/bin/phpunit:122

5) Tests_Interactivity_API_WpInteractivityAPI::test_process_directives_doesnt_change_html_if_contains_unbalanced_tags with data set "DIV closer before" ('</div><div data-wp-bind--id="...</div>')
Cannot use bool as array

/var/www/src/wp-includes/interactivity-api/class-wp-interactivity-api.php:426
/var/www/src/wp-includes/interactivity-api/class-wp-interactivity-api.php:370
/var/www/tests/phpunit/tests/interactivity-api/wpInteractivityAPI.php:823
/var/www/vendor/bin/phpunit:122

6) Tests_Interactivity_API_WpInteractivityAPI::test_process_directives_doesnt_change_html_if_contains_unbalanced_tags with data set "DIV closer inside" ('<div data-wp-bind--id="myPlug...</div>')
Cannot use bool as array

/var/www/src/wp-includes/interactivity-api/class-wp-interactivity-api.php:426
/var/www/src/wp-includes/interactivity-api/class-wp-interactivity-api.php:370
/var/www/tests/phpunit/tests/interactivity-api/wpInteractivityAPI.php:823
/var/www/vendor/bin/phpunit:122

7) Tests_Interactivity_API_WpInteractivityAPI::test_process_directives_doesnt_change_html_if_contains_unbalanced_tags with data set "SPAN closer after" ('<div data-wp-bind--id="myPlug.../span>')
Cannot use bool as array

/var/www/src/wp-includes/interactivity-api/class-wp-interactivity-api.php:426
/var/www/src/wp-includes/interactivity-api/class-wp-interactivity-api.php:370
/var/www/tests/phpunit/tests/interactivity-api/wpInteractivityAPI.php:823
/var/www/vendor/bin/phpunit:122

The issue is the list( $opening_tag_name, $directives_prefixes ) = end( $tag_stack ); line when $tag_stack is empty. end() returns false for empty arrays, but list() expects an array.

Change History (2)

This ticket was mentioned in PR #9889 on WordPress/wordpress-develop by @swissspidy.


8 months ago
#1

Can't use list on false or empty array.

This implicitly worked, but doesn't anymore on PHP 8.5

Trac ticket: https://core.trac.wordpress.org/ticket/63977

#2 @swissspidy
8 months ago

  • Owner set to swissspidy
  • Resolution set to fixed
  • Status changed from new to closed

In 60741:

Interactivity API: Fix "Cannot use bool as array" error.

Improves PHP 8.5 compatibility where calling list() on an empty array throws a warning.

Props swissspidy, jonsurrell, mukesh27.
Fixes #63977.
See #63061.

Note: See TracTickets for help on using tickets.