WordPress.org

Make WordPress Core

Ticket #14134: 14134.6.diff

File 14134.6.diff, 1.3 KB (added by ericlewis, 5 years ago)
  • src/wp-admin/nav-menus.php

     
    5151
    5252/*
    5353 * If a JSON blob of navigation menu data is found, expand it and inject it
    54  * into `$_POST` to avoid PHP `max_input_vars` limitations. See #14134. 
     54 * into `$_POST` to avoid PHP `max_input_vars` limitations. See #14134.
    5555 */
    5656if ( isset( $_POST['nav-menu-data'] ) ) {
    5757        $data = json_decode( stripslashes( $_POST['nav-menu-data'] ) );
     
    5858        if ( ! is_null( $data ) && $data ) {
    5959                foreach ( $data as $post_input_data ) {
    6060                        // For input names that are arrays (e.g. `menu-item-db-id[3]`), derive the array path keys via regex.
    61                         if ( preg_match( '#(.*)(?:\[(\d+)\])#', $post_input_data->name, $matches ) ) {
     61                        if ( preg_match( '#(.*)\[(\w+)\]#', $post_input_data->name, $matches ) ) {
    6262                                if ( empty( $_POST[ $matches[1] ] ) ) {
    6363                                        $_POST[ $matches[1] ] = array();
    6464                                }
    65                                 $_POST[ $matches[1] ][ (int) $matches[2] ] = wp_slash( $post_input_data->value );
     65                                if( is_numeric( $matches[2] ) ) {
     66                                        $matches[2] = (int) $matches[2];
     67                                }
     68                                $_POST[ $matches[1] ][ $matches[2] ] = wp_slash( $post_input_data->value );
    6669                        } else {
    6770                                $_POST[ $post_input_data->name ] = wp_slash( $post_input_data->value );
    6871                        }