Make WordPress Core

Ticket #38903: 38903.3.diff

File 38903.3.diff, 1.9 KB (added by salcode, 7 years ago)
  • src/wp-includes/option.php

    diff --git src/wp-includes/option.php src/wp-includes/option.php
    index ac17c2f..a5fb459 100644
    function update_option( $option, $value, $autoload = null ) { 
    296296        $value = apply_filters( 'pre_update_option', $value, $option, $old_value );
    297297
    298298        // If the new and old values are the same, no need to update.
    299         if ( $value === $old_value )
     299        if ( maybe_serialize( $value ) === maybe_serialize( $old_value ) ) {
    300300                return false;
     301        }
    301302
    302303        /** This filter is documented in wp-includes/option.php */
    303304        if ( apply_filters( 'default_option_' . $option, false, $option, false ) === $old_value ) {
  • tests/phpunit/tests/option/updateOption.php

    diff --git tests/phpunit/tests/option/updateOption.php tests/phpunit/tests/option/updateOption.php
    index 32ae5e5..eeb45fb 100644
    class Tests_Option_UpdateOption extends WP_UnitTestCase { 
    166166        }
    167167
    168168        /**
     169         * @ticket 38903
     170         */
     171        public function test_update_option_array_with_object() {
     172                $array_w_object = array(
     173                        'url'       => 'http://src.wordpress-develop.dev/wp-content/uploads/2016/10/cropped-Blurry-Lights.jpg',
     174                        'meta_data' => ( object ) array(
     175                                'attachment_id' => 292,
     176                                'height'        => 708,
     177                                'width'         => 1260,
     178                        )
     179                );
     180
     181                // Add the option, it did not exist before this.
     182                add_option( 'array_w_object', $array_w_object );
     183
     184                $num_queries_pre_update = get_num_queries();
     185
     186                // Update the option using the same array with an object for the value.
     187                $this->assertFalse( update_option( 'array_w_object', $array_w_object ) );
     188
     189                // Check that no new database queries were performed.
     190                $this->assertEquals( $num_queries_pre_update, get_num_queries() );
     191        }
     192
     193        /**
    169194         * `add_filter()` callback for test_should_respect_default_option_filter_when_option_does_not_yet_exist_in_database().
    170195         */
    171196        public function __return_foo() {