Make WordPress Core

Changeset 56740

Timestamp:
09/28/2023 09:24:35 PM (10 months ago)
Author:
hellofromTonya
Message:

Code Modernization: Fix "passing null to non-nullable" deprecation from next_posts().

The esc_url() function expects to a string for $url parameter. There is no input validation within that function. The function contains a ltrim() which also expects a string. Passing null to this parameter results in Deprecated: ltrim(): Passing null to parameter #1 ($string) of type string is deprecated notice on PHP 8.1+.

Tracing the stack back, a null is being passed to it within next_posts() when get_next_posts_page_link() returns null (it can return a string or null).

On PHP 7.0 to PHP 8.x, an empty string is returned from esc_url() when null is passed to it. The change in this changeset avoids the deprecation notice by not invoking esc_url() when get_next_posts_page_link() returns null and instead sets the $output to an empty string, thus maintain the same behavior as before (minus the deprecation notice).

Adds a test to validate an empty string is returned and the absence of the deprecation (when running on PHP 8.1+).

Follow-up to [11383], [9632].

Props codersantosh, nihar007, hellofromTonya, mukesh27, oglekler, rajinsharwar.
Fixes #59154.

Location:
trunk
Files:
1 added
1 edited

Legend:

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

    r56548 r56740  
    25122512 */
    25132513function next_posts( $max_page = 0, $display = true ) {
    2514     $output = esc_url( get_next_posts_page_link( $max_page ) );
     2514    $link   = get_next_posts_page_link( $max_page );
     2515    $output = $link ? esc_url( $link ) : '';
    25152516
    25162517    if ( $display ) {
Note: See TracChangeset for help on using the changeset viewer.