Make WordPress Core

Changeset 62034


Ignore:
Timestamp:
03/16/2026 09:54:06 PM (12 days ago)
Author:
SergeyBiryukov
Message:

Code Modernization: Fix "passing null to non-nullable" deprecation from previous_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 previous_posts() when get_previous_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_previous_posts_page_link() returns null and instead sets the $output to an empty string, thus maintaining 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 [9632], [11383], [56740].

Props dd32, alexodiy.
Fixes #64864.

Location:
trunk
Files:
1 added
1 edited

Legend:

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

    r61766 r62034  
    26502650 */
    26512651function previous_posts( $display = true ) {
    2652     $output = esc_url( get_previous_posts_page_link() );
     2652    $link   = get_previous_posts_page_link();
     2653    $output = $link ? esc_url( $link ) : '';
    26532654
    26542655    if ( $display ) {
Note: See TracChangeset for help on using the changeset viewer.