Make WordPress Core


Ignore:
Timestamp:
09/27/2024 05:51:49 PM (6 months ago)
Author:
hellofromTonya
Message:

Code Modernization: Fix trigger_error() with E_USER_ERROR deprecation in Text_Diff::_check().

PHP 8.4 deprecates the use of trigger_errror() with E_USER_ERROR as the error level, as there are a number of gotchas to this way of creating a Fatal Error (finally blocks not executing, destructors not executing). The recommended replacements are either to use exceptions or to do a hard exit.

This is an unmaintained external dependency; thus, the fix is made in the WP specific copy of the dependency.

Now, there were basically three options:

  • Silence the deprecation until PHP 9.0 and delay properly solving this until then.

This would lead to an awkward solution, as prior to PHP 8.0, error silencing would apply to all errors, while, as of PHP 8.0, it will no longer apply to fatal errors.
It also would only buy us some time and wouldn't actually solve anything.

  • Use exit($status).

This would make the code untestable and would disable handling of these errors via custom error handlers, which makes this an undesirable solution.

  • Throw an exception.

This makes for the most elegant solution with the least BC-breaking impact.

The third option is implemented which:

  • Introduces a new Text_Exception class.
  • Starts using that in the Text_Diff::_check() method in all applicable places.
  • Adds tests for the first two error conditions.

References:

Follow-up to [59070], [52978], [7747].

Props jrf.
See #62061.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/wp-includes/wp-diff.php

    r47198 r59105  
    1616    /** Text_Diff_Renderer_inline class */
    1717    require ABSPATH . WPINC . '/Text/Diff/Renderer/inline.php';
     18    /** Text_Exception class */
     19    require ABSPATH . WPINC . '/Text/Exception.php';
    1820}
    1921
Note: See TracChangeset for help on using the changeset viewer.