WordPress.org

Make WordPress Core

Changeset 46395


Ignore:
Timestamp:
10/05/2019 12:53:39 AM (13 days ago)
Author:
SergeyBiryukov
Message:

Themes: In get_theme_mod(), only run the sprintf() replacement on the default value if there's a string format pattern found in the value.

This prevents standalone percent symbols from being stripped out, e.g. in a default value like 100%.

Props aristath, kuus, moonomo, westonruter, davetgreen, daviedR, katielgc, noisysocks, SergeyBiryukov.
Fixes #34290.

Location:
trunk
Files:
2 edited

Legend:

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

    r46394 r46395  
    935935
    936936    if ( is_string( $default ) ) {
    937         $default = sprintf( $default, get_template_directory_uri(), get_stylesheet_directory_uri() );
     937        // Only run the replacement if an sprintf() string format pattern was found.
     938        if ( preg_match( '#(?<!%)%(?:\d+\$?)?s#', $default ) ) {
     939            $default = sprintf( $default, get_template_directory_uri(), get_stylesheet_directory_uri() );
     940        }
    938941    }
    939942
  • trunk/tests/phpunit/tests/option/themeMods.php

    r33812 r46395  
    3333    }
    3434
     35    /**
     36     * @ticket 34290
     37     *
     38     * @dataProvider data_theme_mod_default_value_with_percent_symbols
     39     */
     40    function test_theme_mod_default_value_with_percent_symbols( $default, $expected ) {
     41        $this->assertEquals( $expected, get_theme_mod( 'test_name', $default ) );
     42    }
     43
     44    function data_theme_mod_default_value_with_percent_symbols() {
     45        return array(
     46            array(
     47                '100%',
     48                '100%',
     49            ),
     50            array(
     51                '%s',
     52                get_template_directory_uri(),
     53            ),
     54            array(
     55                '%s%s',
     56                get_template_directory_uri() . get_stylesheet_directory_uri(),
     57            ),
     58            array(
     59                '%1$s%s',
     60                get_template_directory_uri() . get_template_directory_uri(),
     61            ),
     62            array(
     63                '%2$s%s',
     64                get_stylesheet_directory_uri() . get_template_directory_uri(),
     65            ),
     66            array(
     67                '%1$s%2$s',
     68                get_template_directory_uri() . get_stylesheet_directory_uri(),
     69            ),
     70            array(
     71                '%40s%40s',
     72                get_template_directory_uri() . get_stylesheet_directory_uri(),
     73            ),
     74            array(
     75                '%%1',
     76                '%%1',
     77            ),
     78            array(
     79                '%1%',
     80                '%1%',
     81            ),
     82            array(
     83                '1%%',
     84                '1%%',
     85            ),
     86            array(
     87                '%%s',
     88                '%%s',
     89            ),
     90            array(
     91                '%s%',
     92                get_template_directory_uri(),
     93            ),
     94            array(
     95                's%%',
     96                's%%',
     97            ),
     98        );
     99    }
     100
    35101}
Note: See TracChangeset for help on using the changeset viewer.