Make WordPress Core

Ticket #47564: fix_customizer_nav_menu_freeze.diff

File fix_customizer_nav_menu_freeze.diff, 835 bytes (added by donpark, 5 years ago)
  • src/js/_enqueues/wp/customize/nav-menus.js

     
    18761876                        if ( ! setting ) {
    18771877                                return 0;
    18781878                        }
    1879                         while ( setting && setting.menu_item_parent ) {
     1879                        // Protect against bad recursive navigation menu data causing causing browser to freeze.
     1880                        var seen_parents = {};
     1881                        while ( setting && setting.menu_item_parent && ! seen_parents[setting.menu_item_parent] ) {
    18801882                                depth += 1;
    18811883                                control = api.control( 'nav_menu_item[' + setting.menu_item_parent + ']' );
    18821884                                if ( ! control ) {
    18831885                                        break;
    18841886                                }
     1887                                seen_parents[setting.menu_item_parent] = setting;
    18851888                                setting = control.setting();
    18861889                        }
    18871890                        return depth;