Automattic / jetpack

Security, performance, marketing, and design tools — Jetpack is made by WordPress experts to make WP sites safer and faster, and help you grow your traffic.
https://jetpack.com/
Other
1.59k stars 799 forks source link

wp_is_stream() causing strpos(): Passing null to parameter #1 ($haystack) of type string is deprecated #37298

Open ablears opened 5 months ago

ablears commented 5 months ago

Impacted plugin

Jetpack

Quick summary

PHP Deprecated: strpos(): Passing null to parameter #1 ($haystack) of type string is deprecated in wp-includes/functions.php on line 7288 PHP Deprecated: str_replace(): Passing null to parameter #3 ($subject) of type array|string is deprecated in wp-includes/functions.php on line 2187

I added error logging to find where this was coming from:

wp_is_stream called with non-string path by [{"file":"wp-includes\/functions.php","line":2180,"function":"wp_is_stream"},{"file":"wp-content\/plugins\/woocommerce\/vendor\/jetpack-autoloader\/class-path-processor.php","line":73,"function":"wp_normalize_path"}]

Steps to reproduce

Run a WP CLI command like wp site list

A clear and concise description of what you expected to happen.

No depreciated error logs

What actually happened

Error log and console errors (in the case of WP CLI)

Impact

All

Available workarounds?

No but the platform is still usable

Platform (Simple and/or Atomic)

Self-hosted

Logs or notes

Debian GNU/Linux 10 (buster) PHP 8.1.14 WP-CLI 2.10.0 WordPress 6.5.3 WooCommerce 8.7.0

jeherve commented 5 months ago

This seems related to #37172.

Do you have any other plugins installed on your site at the moment?

anomiex commented 5 months ago

I added error logging to find where this was coming from:

wp_is_stream called with non-string path by [{"file":"wp-includes\/functions.php","line":2180,"function":"wp_is_stream"},{"file":"wp-content\/plugins\/woocommerce\/vendor\/jetpack-autoloader\/class-path-processor.php","line":73,"function":"wp_normalize_path"}]

Can you do that again but capture all the stack frames instead of only two?

Attempting some static analysis, the line 73 mentioned corresponds to the second line in this code: https://github.com/Automattic/jetpack/blob/d49d1cc2ac5a52f1acd907c85e8532128982347c/projects/packages/autoloader/src/class-path-processor.php#L64-L65 That find_directory_with_autoloader method is called in three places. The only one that seems at all reasonable to have passed in null is this one. In turn, the only caller of that method that seems likely is here, which in turn suggests you somehow have the active_plugins or active_sitewide_plugins option having a value with a null value for some key.