close

Make WordPress Core

Changeset 62001


Ignore:
Timestamp:
03/13/2026 12:29:20 PM (7 hours ago)
Author:
johnbillion
Message:

Grouped backports for the 5.2 branch.

  • XML-RPC: Switch to wp_safe_remote() when fetching a pingback URL.
  • HTML API: Prevent WP_HTML_Tag_Processor instances being unserialized and add some extra logic for validating pattern and template file paths.
  • KSES: Optimize PCRE pattern detecting numeric character references.
  • Customize: Improve escaping approach used for nav menu attributes.
  • Media: Ensure the attachment parent is accessible to the user before showing a link to it in the media manager.
  • Administration: Ensure client-side templates are only detected when they're correctly associated with a script tag.
  • Filesystem API: Don't attempt to extract invalid files from a zip when using the PclZip library.

Merges [61879-61884,61886-61887,61890,61913] to the 5.2 branch.

Props johnbillion, xknown, dmsnell, jorbin, peterwilson, desrosj, westonruter, jonsurrell, aurdasjb.

Location:
branches/5.2
Files:
12 edited

Legend:

Unmodified
Added
Removed
  • branches/5.2

  • branches/5.2/src/js/_enqueues/wp/util.js

    r43347 r62001  
    3737
    3838        return function ( data ) {
    39             compiled = compiled || _.template( $( '#tmpl-' + id ).html(),  options );
     39            var el = document.querySelector( 'script#tmpl-' + id );
     40            if ( ! el ) {
     41                throw new Error( 'Template not found: ' + '#tmpl-' + id );
     42            }
     43            compiled = compiled || _.template( $( el ).html(), options );
    4044            return compiled( data );
    4145        };
  • branches/5.2/src/wp-admin/includes/class-walker-nav-menu-checklist.php

    r43598 r62001  
    109109        $output .= '<input type="hidden" class="menu-item-parent-id" name="menu-item[' . $possible_object_id . '][menu-item-parent-id]" value="' . esc_attr( $item->menu_item_parent ) . '" />';
    110110        $output .= '<input type="hidden" class="menu-item-type" name="menu-item[' . $possible_object_id . '][menu-item-type]" value="' . esc_attr( $item->type ) . '" />';
    111         $output .= '<input type="hidden" class="menu-item-title" name="menu-item[' . $possible_object_id . '][menu-item-title]" value="' . esc_attr( $item->title ) . '" />';
     111        $output .= '<input type="hidden" class="menu-item-title" name="menu-item[' . $possible_object_id . '][menu-item-title]" value="' . htmlspecialchars( $item->title, ENT_QUOTES ) . '" />';
    112112        $output .= '<input type="hidden" class="menu-item-url" name="menu-item[' . $possible_object_id . '][menu-item-url]" value="' . esc_attr( $item->url ) . '" />';
    113113        $output .= '<input type="hidden" class="menu-item-target" name="menu-item[' . $possible_object_id . '][menu-item-target]" value="' . esc_attr( $item->target ) . '" />';
    114         $output .= '<input type="hidden" class="menu-item-attr_title" name="menu-item[' . $possible_object_id . '][menu-item-attr_title]" value="' . esc_attr( $item->attr_title ) . '" />';
    115         $output .= '<input type="hidden" class="menu-item-classes" name="menu-item[' . $possible_object_id . '][menu-item-classes]" value="' . esc_attr( implode( ' ', $item->classes ) ) . '" />';
    116         $output .= '<input type="hidden" class="menu-item-xfn" name="menu-item[' . $possible_object_id . '][menu-item-xfn]" value="' . esc_attr( $item->xfn ) . '" />';
     114        $output .= '<input type="hidden" class="menu-item-attr_title" name="menu-item[' . $possible_object_id . '][menu-item-attr-title]" value="' . htmlspecialchars( $item->attr_title, ENT_QUOTES ) . '" />';
     115        $output .= '<input type="hidden" class="menu-item-classes" name="menu-item[' . $possible_object_id . '][menu-item-classes]" value="' . htmlspecialchars( implode( ' ', $item->classes ), ENT_QUOTES ) . '" />';
     116        $output .= '<input type="hidden" class="menu-item-xfn" name="menu-item[' . $possible_object_id . '][menu-item-xfn]" value="' . htmlspecialchars( $item->xfn, ENT_QUOTES ) . '" />';
    117117    }
    118118
  • branches/5.2/src/wp-admin/includes/class-walker-nav-menu-edit.php

    r43598 r62001  
    171171                    <label for="edit-menu-item-title-<?php echo $item_id; ?>">
    172172                        <?php _e( 'Navigation Label' ); ?><br />
    173                         <input type="text" id="edit-menu-item-title-<?php echo $item_id; ?>" class="widefat edit-menu-item-title" name="menu-item-title[<?php echo $item_id; ?>]" value="<?php echo esc_attr( $item->title ); ?>" />
     173                        <input type="text" id="edit-menu-item-title-<?php echo $item_id; ?>" class="widefat edit-menu-item-title" name="menu-item-title[<?php echo $item_id; ?>]" value="<?php echo htmlspecialchars( $item->title, ENT_QUOTES ); ?>" />
    174174                    </label>
    175175                </p>
     
    177177                    <label for="edit-menu-item-attr-title-<?php echo $item_id; ?>">
    178178                        <?php _e( 'Title Attribute' ); ?><br />
    179                         <input type="text" id="edit-menu-item-attr-title-<?php echo $item_id; ?>" class="widefat edit-menu-item-attr-title" name="menu-item-attr-title[<?php echo $item_id; ?>]" value="<?php echo esc_attr( $item->post_excerpt ); ?>" />
     179                        <input type="text" id="edit-menu-item-attr-title-<?php echo $item_id; ?>" class="widefat edit-menu-item-attr-title" name="menu-item-attr-title[<?php echo $item_id; ?>]" value="<?php echo htmlspecialchars( $item->post_excerpt, ENT_QUOTES ); ?>" />
    180180                    </label>
    181181                </p>
     
    189189                    <label for="edit-menu-item-classes-<?php echo $item_id; ?>">
    190190                        <?php _e( 'CSS Classes (optional)' ); ?><br />
    191                         <input type="text" id="edit-menu-item-classes-<?php echo $item_id; ?>" class="widefat code edit-menu-item-classes" name="menu-item-classes[<?php echo $item_id; ?>]" value="<?php echo esc_attr( implode( ' ', $item->classes ) ); ?>" />
     191                        <input type="text" id="edit-menu-item-classes-<?php echo $item_id; ?>" class="widefat code edit-menu-item-classes" name="menu-item-classes[<?php echo $item_id; ?>]" value="<?php echo htmlspecialchars( implode( ' ', $item->classes ), ENT_QUOTES ); ?>" />
    192192                    </label>
    193193                </p>
     
    195195                    <label for="edit-menu-item-xfn-<?php echo $item_id; ?>">
    196196                        <?php _e( 'Link Relationship (XFN)' ); ?><br />
    197                         <input type="text" id="edit-menu-item-xfn-<?php echo $item_id; ?>" class="widefat code edit-menu-item-xfn" name="menu-item-xfn[<?php echo $item_id; ?>]" value="<?php echo esc_attr( $item->xfn ); ?>" />
     197                        <input type="text" id="edit-menu-item-xfn-<?php echo $item_id; ?>" class="widefat code edit-menu-item-xfn" name="menu-item-xfn[<?php echo $item_id; ?>]" value="<?php echo htmlspecialchars( $item->xfn, ENT_QUOTES ); ?>" />
    198198                    </label>
    199199                </p>
  • branches/5.2/src/wp-admin/includes/file.php

    r45516 r62001  
    15771577        }
    15781578
     1579        // Don't extract invalid files:
     1580        if ( 0 !== validate_file( $file['filename'] ) ) {
     1581            continue;
     1582        }
     1583
    15791584        $uncompressed_size += $file['size'];
    15801585
  • branches/5.2/src/wp-includes/ID3/getid3.lib.php

    r61993 r62001  
    536536    }
    537537
    538     /**
    539      * Converts an XML string to an array, using SimpleXML if available
    540      */
    541538    public static function XML2array($XMLstring) {
    542539        if (function_exists('simplexml_load_string') && function_exists('libxml_disable_entity_loader')) {
     
    544541            // https://core.trac.wordpress.org/changeset/29378
    545542            $loader = libxml_disable_entity_loader(true);
    546             $XMLobject = simplexml_load_string($XMLstring, 'SimpleXMLElement', LIBXML_NOENT);
     543            $XMLobject = simplexml_load_string($XMLstring, 'SimpleXMLElement', 0);
    547544            $return = self::SimpleXMLelement2array($XMLobject);
    548545            libxml_disable_entity_loader($loader);
  • branches/5.2/src/wp-includes/class-wp-http-ixr-client.php

    r42876 r62001  
    8686        }
    8787
    88         $response = wp_remote_post( $url, $args );
     88        $response = wp_safe_remote_post( $url, $args );
    8989
    9090        if ( is_wp_error( $response ) ) {
  • branches/5.2/src/wp-includes/kses.php

    r46901 r62001  
    17281728    $string = str_replace( '&', '&amp;', $string );
    17291729
    1730     // Change back the allowed entities in our entity whitelist
    17311730    $string = preg_replace_callback( '/&amp;([A-Za-z]{2,8}[0-9]{0,2});/', 'wp_kses_named_entities', $string );
    1732     $string = preg_replace_callback( '/&amp;#(0*[0-9]{1,7});/', 'wp_kses_normalize_entities2', $string );
    1733     $string = preg_replace_callback( '/&amp;#[Xx](0*[0-9A-Fa-f]{1,6});/', 'wp_kses_normalize_entities3', $string );
     1731    $string = preg_replace_callback( '/&amp;#(0*[1-9][0-9]{0,6});/', 'wp_kses_normalize_entities2', $string );
     1732    $string = preg_replace_callback( '/&amp;#[Xx](0*[1-9A-Fa-f][0-9A-Fa-f]{0,5});/', 'wp_kses_normalize_entities3', $string );
    17341733
    17351734    return $string;
  • branches/5.2/src/wp-includes/media.php

    r56876 r62001  
    32773277    }
    32783278
    3279     if ( $post_parent ) {
     3279    if ( $post_parent && current_user_can( 'read_post', $attachment->post_parent ) ) {
    32803280        $parent_type = get_post_type_object( $post_parent->post_type );
    32813281
     
    32843284        }
    32853285
    3286         if ( $parent_type && current_user_can( 'read_post', $attachment->post_parent ) ) {
     3286        if ( $parent_type ) {
    32873287            $response['uploadedToTitle'] = $post_parent->post_title ? $post_parent->post_title : __( '(no title)' );
    32883288        }
  • branches/5.2/src/wp-includes/nav-menu.php

    r45832 r62001  
    485485        }
    486486
    487         if ( $args['menu-item-title'] == $original_title ) {
     487        if ( wp_unslash( $args['menu-item-title'] ) === $original_title ) {
    488488            $args['menu-item-title'] = '';
    489489        }
  • branches/5.2/src/wp-includes/template-loader.php

    r44966 r62001  
    7575     * @param string $template The path of the template to include.
    7676     */
    77     if ( $template = apply_filters( 'template_include', $template ) ) {
    78         include( $template );
     77    $template   = apply_filters( 'template_include', $template );
     78    $is_stringy = is_string( $template ) || ( is_object( $template ) && method_exists( $template, '__toString' ) );
     79    $template   = $is_stringy ? realpath( (string) $template ) : null;
     80    if (
     81        is_string( $template ) &&
     82        ( str_ends_with( $template, '.php' ) || str_ends_with( $template, '.html' ) ) &&
     83        is_file( $template ) &&
     84        is_readable( $template )
     85    ) {
     86        include $template;
    7987    } elseif ( current_user_can( 'switch_themes' ) ) {
    8088        $theme = wp_get_theme();
  • branches/5.2/tests/phpunit/tests/post/nav-menu.php

    r45832 r62001  
    957957    }
    958958
     959    /**
     960     * Tests `wp_update_nav_menu_item()` with special characters in a category name.
     961     *
     962     * When inserting a category as a nav item, the `post_title` property should
     963     * be empty, as the item should get the title from the category object itself.
     964     *
     965     * @ticket 48011
     966     */
     967    function test_wp_update_nav_menu_item_with_special_characters_in_category_name() {
     968        $category_name = 'Test Cat - \"Pre-Slashed\" Cat Name & >';
     969
     970        $category = self::factory()->category->create_and_get(
     971            array(
     972                'name' => $category_name,
     973            )
     974        );
     975
     976        $this->assertSame( 'Test Cat - "Pre-Slashed" Cat Name &amp; &gt;', $category->name );
     977
     978        $category_item_id = wp_update_nav_menu_item(
     979            $this->menu_id,
     980            0,
     981            array(
     982                'menu-item-type'      => 'taxonomy',
     983                'menu-item-object'    => 'category',
     984                'menu-item-object-id' => $category->term_id,
     985                'menu-item-status'    => 'publish',
     986                'menu-item-title'     => $category->name,
     987            )
     988        );
     989
     990        $category_item = get_post( $category_item_id );
     991        $this->assertEmpty( $category_item->post_title );
     992    }
    959993}
Note: See TracChangeset for help on using the changeset viewer.