WordPress.org

Make WordPress Core

Ticket #30613: 30613.2.diff

File 30613.2.diff, 20.2 KB (added by TobiasBg, 6 years ago)
  • src/wp-admin/customize.php

    diff --git src/wp-admin/customize.php src/wp-admin/customize.php
    index 178db28..5d1a357 100644
    do_action( 'customize_controls_print_scripts' ); 
    304304                }
    305305        }
    306306
     307        $settings = wp_json_encode( $settings );
     308        // Sanity check to print valid JSON.
     309        if ( false === $settings ) {
     310                $settings = '[]';
     311        }
     312
    307313        ?>
    308314        <script type="text/javascript">
    309                 var _wpCustomizeSettings = <?php echo wp_json_encode( $settings ); ?>;
     315                var _wpCustomizeSettings = <?php echo $settings; ?>;
    310316        </script>
    311317</div>
    312318</body>
  • src/wp-admin/includes/ajax-actions.php

    diff --git src/wp-admin/includes/ajax-actions.php src/wp-admin/includes/ajax-actions.php
    index c5718ae..3d51db8 100644
    function wp_ajax_autocomplete_user() { 
    289289                );
    290290        }
    291291
    292         wp_die( wp_json_encode( $return ) );
     292        $return = wp_json_encode( $return );
     293        // Sanity check to print valid JSON.
     294        if ( false === $return ) {
     295                $return = '[]';
     296        }
     297
     298        wp_die( $return );
    293299}
    294300
    295301/**
    function wp_ajax_menu_get_metabox() { 
    13751381
    13761382                $markup = ob_get_clean();
    13771383
    1378                 echo wp_json_encode(array(
     1384                $json = wp_json_encode( array(
    13791385                        'replace-id' => $type . '-' . $item->name,
    13801386                        'markup' => $markup,
    1381                 ));
     1387                ) );
     1388                // Sanity check to print valid JSON.
     1389                if ( false === $json ) {
     1390                        $json = '[]';
     1391                }
     1392
     1393                echo $json;
    13821394        }
    13831395
    13841396        wp_die();
    function wp_ajax_wp_link_ajax() { 
    14041416        if ( ! isset( $results ) )
    14051417                wp_die( 0 );
    14061418
    1407         echo wp_json_encode( $results );
     1419        $results = wp_json_encode( $results );
     1420        // Sanity check to print valid JSON.
     1421        if ( false === $results ) {
     1422                $results = '[]';
     1423        }
     1424
     1425        echo $results;
    14081426        echo "\n";
    14091427
    14101428        wp_die();
    function wp_ajax_image_editor() { 
    19191937                case 'save' :
    19201938                        $msg = wp_save_image($attachment_id);
    19211939                        $msg = wp_json_encode($msg);
     1940                        // Sanity check to print valid JSON.
     1941                        if ( false === $msg ) {
     1942                                $msg = '{}';
     1943                        }
    19221944                        wp_die( $msg );
    19231945                        break;
    19241946                case 'scale' :
  • src/wp-admin/includes/class-wp-list-table.php

    diff --git src/wp-admin/includes/class-wp-list-table.php src/wp-admin/includes/class-wp-list-table.php
    index 1152e64..6ca8210 100644
    class WP_List_Table { 
    11061106                        $response['total_pages_i18n'] = number_format_i18n( $this->_pagination_args['total_pages'] );
    11071107                }
    11081108
    1109                 die( wp_json_encode( $response ) );
     1109                $response = wp_json_encode( $response );
     1110                // Sanity check to print valid JSON.
     1111                if ( false === $response ) {
     1112                        $response = '[]';
     1113                }
     1114
     1115                die( $response );
    11101116        }
    11111117
    11121118        /**
    class WP_List_Table { 
    11231129                        )
    11241130                );
    11251131
    1126                 printf( "<script type='text/javascript'>list_args = %s;</script>\n", wp_json_encode( $args ) );
     1132                $args = wp_json_encode( $args );
     1133                // Sanity check to print valid JSON.
     1134                if ( false === $args ) {
     1135                        $args = '[]';
     1136                }
     1137
     1138                printf( "<script type='text/javascript'>list_args = %s;</script>\n", $args );
    11271139        }
    11281140}
  • src/wp-admin/includes/class-wp-themes-list-table.php

    diff --git src/wp-admin/includes/class-wp-themes-list-table.php src/wp-admin/includes/class-wp-themes-list-table.php
    index 6311e75..f8072bb 100644
    class WP_Themes_List_Table extends WP_List_Table { 
    276276                        'total_pages' => ! empty( $this->_pagination_args['total_pages'] ) ? $this->_pagination_args['total_pages'] : 1,
    277277                );
    278278
    279                 if ( is_array( $extra_args ) )
     279                if ( is_array( $extra_args ) ) {
    280280                        $args = array_merge( $args, $extra_args );
     281                }
     282
     283                $args = wp_json_encode( $args );
     284                // Sanity check to print valid JSON.
     285                if ( false === $args ) {
     286                        $args = '[]';
     287                }
    281288
    282                 printf( "<script type='text/javascript'>var theme_list_args = %s;</script>\n", wp_json_encode( $args ) );
     289                printf( "<script type='text/javascript'>var theme_list_args = %s;</script>\n", $args );
    283290                parent::_js_vars();
    284291        }
    285292}
  • src/wp-admin/includes/media.php

    diff --git src/wp-admin/includes/media.php src/wp-admin/includes/media.php
    index 562301e..91c84e1 100644
    if( !$large_size_h ) 
    18291829$large_size_w = absint( get_option('large_size_w') );
    18301830if( !$large_size_w )
    18311831        $large_size_w = 1024;
     1832
     1833$plupload_init = wp_json_encode( $plupload_init );
     1834// Sanity check to print valid JSON.
     1835if ( false === $plupload_init ) {
     1836        $plupload_init = '[]';
     1837}
    18321838?>
    18331839var resize_height = <?php echo $large_size_h; ?>, resize_width = <?php echo $large_size_w; ?>,
    1834 wpUploaderInit = <?php echo wp_json_encode( $plupload_init ); ?>;
     1840wpUploaderInit = <?php echo $plupload_init; ?>;
    18351841</script>
    18361842
    18371843<div id="plupload-upload-ui" class="hide-if-no-js">
  • src/wp-admin/includes/misc.php

    diff --git src/wp-admin/includes/misc.php src/wp-admin/includes/misc.php
    index 7b710cb..9ed886d 100644
    function admin_color_scheme_picker( $user_id ) { 
    616616                <?php
    617617                wp_nonce_field( 'save-color-scheme', 'color-nonce', false );
    618618                foreach ( $_wp_admin_css_colors as $color => $color_info ) :
    619 
     619                        $icon_colors = wp_json_encode( array( 'icons' => $color_info->icon_colors ) );
     620                        // Sanity check to print valid JSON.
     621                        if ( false === $icon_colors ) {
     622                                $icon_colors = '[]';
     623                        }
    620624                        ?>
    621625                        <div class="color-option <?php echo ( $color == $current_color ) ? 'selected' : ''; ?>">
    622626                                <input name="admin_color" id="admin_color_<?php echo esc_attr( $color ); ?>" type="radio" value="<?php echo esc_attr( $color ); ?>" class="tog" <?php checked( $color, $current_color ); ?> />
    623627                                <input type="hidden" class="css_url" value="<?php echo esc_url( $color_info->url ); ?>" />
    624                                 <input type="hidden" class="icon_colors" value="<?php echo esc_attr( wp_json_encode( array( 'icons' => $color_info->icon_colors ) ) ); ?>" />
     628                                <input type="hidden" class="icon_colors" value="<?php echo esc_attr( $icon_colors ); ?>" />
    625629                                <label for="admin_color_<?php echo esc_attr( $color ); ?>"><?php echo esc_html( $color_info->name ); ?></label>
    626630                                <table class="color-palette">
    627631                                        <tr>
    function wp_color_scheme_settings() { 
    665669                $icon_colors = array( 'base' => '#999', 'focus' => '#2ea2cc', 'current' => '#fff' );
    666670        }
    667671
    668         echo '<script type="text/javascript">var _wpColorScheme = ' . wp_json_encode( array( 'icons' => $icon_colors ) ) . ";</script>\n";
     672        $icon_colors = wp_json_encode( array( 'icons' => $icon_colors ) );
     673        // Sanity check to print valid JSON.
     674        if ( false === $icon_colors ) {
     675                $icon_colors = '[]';
     676        }
     677
     678        echo "<script type='text/javascript'>var _wpColorScheme = $icon_colors;</script>\n";
    669679}
    670680add_action( 'admin_head', 'wp_color_scheme_settings' );
    671681
  • src/wp-admin/includes/nav-menu.php

    diff --git src/wp-admin/includes/nav-menu.php src/wp-admin/includes/nav-menu.php
    index fe588cd..effa34b 100644
    function _wp_ajax_menu_quick_search( $request = array() ) { 
    356356                                if ( 'markup' == $response_format ) {
    357357                                        echo walk_nav_menu_tree( array_map('wp_setup_nav_menu_item', array( get_post( $object_id ) ) ), 0, (object) $args );
    358358                                } elseif ( 'json' == $response_format ) {
    359                                         echo wp_json_encode(
     359                                        $json = wp_json_encode(
    360360                                                array(
    361361                                                        'ID' => $object_id,
    362362                                                        'post_title' => get_the_title( $object_id ),
    363363                                                        'post_type' => get_post_type( $object_id ),
    364364                                                )
    365365                                        );
    366                                         echo "\n";
     366                                        // Sanity check to print valid JSON.
     367                                        if ( false === $json ) {
     368                                                $json = '[]';
     369                                        }
     370
     371                                        echo "$json\n";
    367372                                }
    368373                        }
    369374                } elseif ( taxonomy_exists( $object_type ) ) {
    function _wp_ajax_menu_quick_search( $request = array() ) { 
    373378                                        echo walk_nav_menu_tree( array_map('wp_setup_nav_menu_item', array( get_term( $object_id, $object_type ) ) ), 0, (object) $args );
    374379                                } elseif ( 'json' == $response_format ) {
    375380                                        $post_obj = get_term( $object_id, $object_type );
    376                                         echo wp_json_encode(
     381                                        $json = wp_json_encode(
    377382                                                array(
    378383                                                        'ID' => $object_id,
    379384                                                        'post_title' => $post_obj->name,
    380385                                                        'post_type' => $object_type,
    381386                                                )
    382387                                        );
    383                                         echo "\n";
     388                                        // Sanity check to print valid JSON.
     389                                        if ( false === $json ) {
     390                                                $json = '[]';
     391                                        }
     392
     393                                        echo "$json\n";
    384394                                }
    385395                        }
    386396
    function _wp_ajax_menu_quick_search( $request = array() ) { 
    401411                                        $var_by_ref = get_the_ID();
    402412                                        echo walk_nav_menu_tree( array_map('wp_setup_nav_menu_item', array( get_post( $var_by_ref ) ) ), 0, (object) $args );
    403413                                } elseif ( 'json' == $response_format ) {
    404                                         echo wp_json_encode(
     414                                        $json = wp_json_encode(
    405415                                                array(
    406416                                                        'ID' => get_the_ID(),
    407417                                                        'post_title' => get_the_title(),
    408418                                                        'post_type' => get_post_type(),
    409419                                                )
    410420                                        );
    411                                         echo "\n";
     421                                        // Sanity check to print valid JSON.
     422                                        if ( false === $json ) {
     423                                                $json = '[]';
     424                                        }
     425
     426                                        echo "$json\n";
    412427                                }
    413428                        }
    414429                } elseif ( 'taxonomy' == $matches[1] ) {
    function _wp_ajax_menu_quick_search( $request = array() ) { 
    422437                                if ( 'markup' == $response_format ) {
    423438                                        echo walk_nav_menu_tree( array_map('wp_setup_nav_menu_item', array( $term ) ), 0, (object) $args );
    424439                                } elseif ( 'json' == $response_format ) {
    425                                         echo wp_json_encode(
     440                                        $json = wp_json_encode(
    426441                                                array(
    427442                                                        'ID' => $term->term_id,
    428443                                                        'post_title' => $term->name,
    429444                                                        'post_type' => $matches[2],
    430445                                                )
    431446                                        );
    432                                         echo "\n";
     447                                        // Sanity check to print valid JSON.
     448                                        if ( false === $json ) {
     449                                                $json = '[]';
     450                                        }
     451
     452                                        echo "$json\n";
    433453                                }
    434454                        }
    435455                }
  • src/wp-admin/includes/template.php

    diff --git src/wp-admin/includes/template.php src/wp-admin/includes/template.php
    index 1340d1e..3572b78 100644
    final class WP_Internal_Pointers { 
    19601960         * @param array  $args Arguments to be passed to the pointer JS (see wp-pointer.js).
    19611961         */
    19621962        private static function print_js( $pointer_id, $selector, $args ) {
    1963                 if ( empty( $pointer_id ) || empty( $selector ) || empty( $args ) || empty( $args['content'] ) )
     1963                if ( empty( $pointer_id ) || empty( $selector ) || empty( $args ) || empty( $args['content'] ) ) {
    19641964                        return;
     1965                }
     1966
     1967                $options = wp_json_encode( $args );
     1968                // Sanity check to print valid JSON.
     1969                if ( false === $options ) {
     1970                        $options = 'false';
     1971                }
    19651972
    19661973                ?>
    19671974                <script type="text/javascript">
    19681975                (function($){
    1969                         var options = <?php echo wp_json_encode( $args ); ?>, setup;
     1976                        var options = <?php echo $options; ?>, setup;
    19701977
    1971                         if ( ! options )
     1978                        if ( ! options ) {
    19721979                                return;
     1980                        }
    19731981
    19741982                        options = $.extend( options, {
    19751983                                close: function() {
    final class WP_Internal_Pointers { 
    19841992                                $('<?php echo $selector; ?>').first().pointer( options ).pointer('open');
    19851993                        };
    19861994
    1987                         if ( options.position && options.position.defer_loading )
     1995                        if ( options.position && options.position.defer_loading ) {
    19881996                                $(window).bind( 'load.wp-pointers', setup );
    1989                         else
     1997                        } else {
    19901998                                $(document).ready( setup );
     1999                        }
    19912000
    19922001                })( jQuery );
    19932002                </script>
  • src/wp-admin/options-general.php

    diff --git src/wp-admin/options-general.php src/wp-admin/options-general.php
    index 960c4f0..7c0bbcd 100644
    $timezone_format = _x('Y-m-d G:i:s', 'timezone date format'); 
    2626 * @since 3.5.0
    2727 */
    2828function options_general_add_js() {
     29        $home_url = wp_json_encode( get_home_url() );
     30        // Sanity check to print valid JSON.
     31        if ( false === $home_url ) {
     32                $home_url = "''";
     33        }
    2934?>
    3035<script type="text/javascript">
    3136        jQuery(document).ready(function($){
    3237                var $siteName = $( '#wp-admin-bar-site-name' ).children( 'a' ).first(),
    33                         homeURL = ( <?php echo wp_json_encode( get_home_url() ); ?> || '' ).replace( /^(https?:\/\/)?(www\.)?/, '' );
     38                        homeURL = ( <?php echo $home_url; ?> || '' ).replace( /^(https?:\/\/)?(www\.)?/, '' );
    3439
    3540                $( '#blogname' ).on( 'input', function() {
    3641                        var title = $.trim( $( this ).val() ) || homeURL;
  • src/wp-includes/class-wp-customize-manager.php

    diff --git src/wp-includes/class-wp-customize-manager.php src/wp-includes/class-wp-customize-manager.php
    index 4947d27..3f6d7e7 100644
    final class WP_Customize_Manager { 
    550550                        $settings['activeControls'][ $id ] = $control->active();
    551551                }
    552552
     553                $settings = wp_json_encode( $settings );
     554                // Sanity check to print valid JSON.
     555                if ( false === $settings ) {
     556                        $settings = '[]';
     557                }
     558
    553559                ?>
    554560                <script type="text/javascript">
    555                         var _wpCustomizeSettings = <?php echo wp_json_encode( $settings ); ?>;
     561                        var _wpCustomizeSettings = <?php echo $settings; ?>;
    556562                </script>
    557563                <?php
    558564        }
  • src/wp-includes/class-wp-customize-widgets.php

    diff --git src/wp-includes/class-wp-customize-widgets.php src/wp-includes/class-wp-customize-widgets.php
    index ba14828..17a442c 100644
    final class WP_Customize_Widgets { 
    741741                        unset( $registered_widget['callback'] ); // may not be JSON-serializeable
    742742                }
    743743
     744                $settings = wp_json_encode( $settings );
     745                // Sanity check to print valid JSON.
     746                if ( false === $settings ) {
     747                        $settings = '[]';
     748                }
     749
    744750                $wp_scripts->add_data(
    745751                        'customize-widgets',
    746752                        'data',
    747                         sprintf( 'var _wpCustomizeWidgetsSettings = %s;', wp_json_encode( $settings ) )
     753                        sprintf( 'var _wpCustomizeWidgetsSettings = %s;', $settings )
    748754                );
    749755        }
    750756
    final class WP_Customize_Widgets { 
    10571063                        unset( $registered_widget['callback'] ); // may not be JSON-serializeable
    10581064                }
    10591065
     1066                $settings = wp_json_encode( $settings );
     1067                // Sanity check to print valid JSON.
     1068                if ( false === $settings ) {
     1069                        $settings = '[]';
     1070                }
     1071
    10601072                ?>
    10611073                <script type="text/javascript">
    1062                         var _wpWidgetCustomizerPreviewSettings = <?php echo wp_json_encode( $settings ); ?>;
     1074                        var _wpWidgetCustomizerPreviewSettings = <?php echo $settings; ?>;
    10631075                </script>
    10641076                <?php
    10651077        }
  • src/wp-includes/class-wp-editor.php

    diff --git src/wp-includes/class-wp-editor.php src/wp-includes/class-wp-editor.php
    index a033b39..0e9fba9 100644
    final class _WP_Editors { 
    519519                                );
    520520
    521521                                if ( ! empty( $mce_external_plugins ) ) {
    522                                         self::$first_init['external_plugins'] = wp_json_encode( $mce_external_plugins );
     522                                        $mce_external_plugins_json = wp_json_encode( $mce_external_plugins );
     523                                        // Sanity check to print valid JSON.
     524                                        if ( false === $mce_external_plugins_json ) {
     525                                                $mce_external_plugins_json = '[]';
     526                                        }
     527
     528                                        self::$first_init['external_plugins'] = $mce_external_plugins_json;
    523529                                }
    524530
    525531                                $suffix = defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ? '' : '.min';
    final class _WP_Editors { 
    10441050                        $mce_translation['_dir'] = 'rtl';
    10451051                }
    10461052
     1053                $mce_translation = wp_json_encode( $mce_translation );
     1054                // Sanity check to print valid JSON.
     1055                if ( false === $mce_translation ) {
     1056                        $mce_translation = '[]';
     1057                }
     1058
    10471059                if ( $json_only ) {
    1048                         return wp_json_encode( $mce_translation );
     1060                        return $mce_translation;
    10491061                }
    10501062
    10511063                $baseurl = self::$baseurl ? self::$baseurl : includes_url( 'js/tinymce' );
    10521064
    1053                 return "tinymce.addI18n( '$mce_locale', " . wp_json_encode( $mce_translation ) . ");\n" .
     1065                return "tinymce.addI18n( '$mce_locale', $mce_translation );\n" .
    10541066                        "tinymce.ScriptLoader.markDone( '$baseurl/langs/$mce_locale.js' );\n";
    10551067        }
    10561068
  • src/wp-includes/class.wp-scripts.php

    diff --git src/wp-includes/class.wp-scripts.php src/wp-includes/class.wp-scripts.php
    index 988ba79..4c10bf8 100644
    class WP_Scripts extends WP_Dependencies { 
    208208                        $l10n[$key] = html_entity_decode( (string) $value, ENT_QUOTES, 'UTF-8');
    209209                }
    210210
    211                 $script = "var $object_name = " . wp_json_encode( $l10n ) . ';';
     211                $json = wp_json_encode( $l10n );
     212                // Sanity check to print valid JSON.
     213                if ( false === $json ) {
     214                        $json = '[]';
     215                }
     216
     217                $script = "var $object_name = $json;";
    212218
    213219                if ( !empty($after) )
    214220                        $script .= "\n$after;";
  • src/wp-includes/functions.php

    diff --git src/wp-includes/functions.php src/wp-includes/functions.php
    index b5327ed..1cd8504 100644
    function _wp_json_convert_string( $string ) { 
    27842784 */
    27852785function wp_send_json( $response ) {
    27862786        @header( 'Content-Type: application/json; charset=' . get_option( 'blog_charset' ) );
    2787         echo wp_json_encode( $response );
    2788         if ( defined( 'DOING_AJAX' ) && DOING_AJAX )
     2787
     2788        $json = wp_json_encode( $response );
     2789        // Sanity check to print valid JSON.
     2790        if ( false === $json ) {
     2791                $json = 'false';
     2792        }
     2793
     2794        echo $json;
     2795
     2796        if ( defined( 'DOING_AJAX' ) && DOING_AJAX ) {
    27892797                wp_die();
    2790         else
     2798        } else {
    27912799                die;
     2800        }
    27922801}
    27932802
    27942803/**
  • src/wp-includes/media.php

    diff --git src/wp-includes/media.php src/wp-includes/media.php
    index 4e95b56..02a1ffb 100644
    function wp_playlist_shortcode( $attr ) { 
    13651365        $safe_type = esc_attr( $atts['type'] );
    13661366        $safe_style = esc_attr( $atts['style'] );
    13671367
     1368        $data_json = wp_json_encode( $data );
     1369        // Sanity check to print valid JSON.
     1370        if ( false === $data_json ) {
     1371                $data_json = '[]';
     1372        }
     1373
    13681374        ob_start();
    13691375
    13701376        if ( 1 === $instance ) {
    function wp_playlist_shortcode( $attr ) { 
    13981404        }
    13991405        ?></ol>
    14001406        </noscript>
    1401         <script type="application/json" class="wp-playlist-script"><?php echo wp_json_encode( $data ) ?></script>
     1407        <script type="application/json" class="wp-playlist-script"><?php echo $data_json; ?></script>
    14021408</div>
    14031409        <?php
    14041410        return ob_get_clean();
    function wp_plupload_default_settings() { 
    25912597                'limitExceeded' => is_multisite() && ! is_upload_space_available()
    25922598        );
    25932599
    2594         $script = 'var _wpPluploadSettings = ' . wp_json_encode( $settings ) . ';';
     2600        $settings = wp_json_encode( $settings );
     2601        // Sanity check to print valid JSON.
     2602        if ( false === $settings ) {
     2603                $settings = '[]';
     2604        }
     2605
     2606        $script = "var _wpPluploadSettings = $settings;";
    25952607
    25962608        if ( $data )
    25972609                $script = "$data\n$script";
  • src/wp-includes/theme.php

    diff --git src/wp-includes/theme.php src/wp-includes/theme.php
    index 3f5b5e7..954e598 100644
    function _wp_customize_loader_settings() { 
    19641964                ),
    19651965        );
    19661966
    1967         $script = 'var _wpCustomizeLoaderSettings = ' . wp_json_encode( $settings ) . ';';
     1967        $settings = wp_json_encode( $settings );
     1968        // Sanity check to print valid JSON.
     1969        if ( false === $settings ) {
     1970                $settings = '[]';
     1971        }
     1972        $script = "var _wpCustomizeLoaderSettings = $settings;";
    19681973
    19691974        $data = $wp_scripts->get_data( 'customize-loader', 'data' );
    19701975        if ( $data )
  • src/wp-includes/update.php

    diff --git src/wp-includes/update.php src/wp-includes/update.php
    index 2e2ef9e..c433260 100644
    function wp_version_check( $extra_stats = array(), $force_check = false ) { 
    9393                'multisite_enabled' => $multisite_enabled,
    9494        );
    9595
     96        $json = wp_json_encode( $translations );
     97        // Sanity check to print valid JSON.
     98        if ( false === $json ) {
     99                $json = '[]';
     100        }
     101
    96102        $post_body = array(
    97                 'translations' => wp_json_encode( $translations ),
     103                'translations' => $json,
    98104        );
    99105
    100106        if ( is_array( $extra_stats ) )
    function wp_update_plugins( $extra_stats = array() ) { 
    277283                        'plugins'      => wp_json_encode( $to_send ),
    278284                        'translations' => wp_json_encode( $translations ),
    279285                        'locale'       => wp_json_encode( $locales ),
    280                         'all'          => wp_json_encode( true ),
     286                        'all'          => 'true', // JSON-encoded true.
    281287                ),
    282288                'user-agent' => 'WordPress/' . $wp_version . '; ' . get_bloginfo( 'url' )
    283289        );
    function wp_update_plugins( $extra_stats = array() ) { 
    286292                $options['body']['update_stats'] = wp_json_encode( $extra_stats );
    287293        }
    288294
     295        // Make sure wp_json_encode() was able to encode everything.
     296        foreach ( $options['body'] as &$item ) {
     297                if ( false === $item ) {
     298                        $item = '[]';
     299                }
     300        }
     301        unset( $item );
     302
    289303        $url = $http_url = 'http://api.wordpress.org/plugins/update-check/1.1/';
    290304        if ( $ssl = wp_http_supports( array( 'ssl' ) ) )
    291305                $url = set_url_scheme( $url, 'https' );
    function wp_update_themes( $extra_stats = array() ) { 
    448462                $options['body']['update_stats'] = wp_json_encode( $extra_stats );
    449463        }
    450464
     465        // Make sure wp_json_encode() was able to encode everything.
     466        foreach ( $options['body'] as &$item ) {
     467                if ( false === $item ) {
     468                        $item = '[]';
     469                }
     470        }
     471        unset( $item );
     472
    451473        $url = $http_url = 'http://api.wordpress.org/themes/update-check/1.1/';
    452474        if ( $ssl = wp_http_supports( array( 'ssl' ) ) )
    453475                $url = set_url_scheme( $url, 'https' );