Make WordPress Core

Ticket #48011: 48011.5.diff

File 48011.5.diff, 2.1 KB (added by audrasjb, 4 years ago)

Patch refreshed for WP 5.5

  • src/wp-includes/nav-menu.php

    diff --git a/src/wp-includes/nav-menu.php b/src/wp-includes/nav-menu.php
    index 80649ef79c..6f4d8c807b 100644
    a b function wp_update_nav_menu_item( $menu_id = 0, $menu_item_db_id = 0, $menu_item 
    492492                        }
    493493                }
    494494
    495                 if ( $args['menu-item-title'] == $original_title ) {
     495                if ( wp_unslash( $args['menu-item-title'] ) == wp_specialchars_decode( $original_title ) ) {
    496496                        $args['menu-item-title'] = '';
    497497                }
    498498
  • tests/phpunit/tests/post/nav-menu.php

    diff --git a/tests/phpunit/tests/post/nav-menu.php b/tests/phpunit/tests/post/nav-menu.php
    index 0001bbce8a..c944b14f03 100644
    a b class Test_Nav_Menus extends WP_UnitTestCase { 
    956956                );
    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 `$args['menu-item-title']` should
     963         * always be empty as it should get the title from the category object itself.
     964         *
     965         * @ticket 48011
     966         */
     967        function test_wp_update_nav_menu_item_with_special_character_in_categories() {
     968
     969                $category_name = 'Test Cat - \"Pre-Slashed\" Cat Name & >';
     970
     971                $cat = self::factory()->category->create_and_get(
     972                        array(
     973                                'name' => $category_name,
     974                        )
     975                );
     976
     977                add_action( 'wp_update_nav_menu_item', array( $this, 'callback_wp_update_nav_menu_item_48011' ), 10, 3 );
     978
     979                wp_update_nav_menu_item(
     980                        $this->menu_id,
     981                        0,
     982                        array(
     983                                'menu-item-type'      => 'taxonomy',
     984                                'menu-item-object'    => 'category',
     985                                'menu-item-object-id' => $cat->term_id,
     986                                'menu-item-status'    => 'publish',
     987                                /**
     988                                 * Interestingly enough, if we use `$cat->name` for the menu item title,
     989                                 * we won't be able to replicate the bug because it's in htmlentities form.
     990                                 */
     991                                'menu-item-title'     => $category_name,
     992                        )
     993                );
     994        }
     995
     996        /**
     997         * Callback for the `wp_update_nav_menu_item` action.
     998         *
     999         * @since 5.5.0
     1000         */
     1001        function callback_wp_update_nav_menu_item_48011( $menu_id, $menu_item_db_id, $args ) {
     1002                $this->assertEmpty( $args['menu-item-title'] );
     1003        }
    9591004}