Ticket #42810: 42810.diff
File 42810.diff, 2.6 KB (added by , 7 years ago) |
---|
-
src/wp-includes/rest-api/fields/class-wp-rest-meta-fields.php
diff --git a/src/wp-includes/rest-api/fields/class-wp-rest-meta-fields.php b/src/wp-includes/rest-api/fields/class-wp-rest-meta-fields.php index e0b4144..b332255 100644
a b abstract class WP_REST_Meta_Fields { 311 311 $old_value = get_metadata( $meta_type, $object_id, $meta_key ); 312 312 313 313 if ( 1 === count( $old_value ) ) { 314 if ( $old_value[0] === $meta_value) {314 if ( $old_value[0] === sanitize_meta( $meta_key, $meta_value, $meta_type ) ) { 315 315 return true; 316 316 } 317 317 } -
tests/phpunit/tests/rest-api/rest-post-meta-fields.php
diff --git a/tests/phpunit/tests/rest-api/rest-post-meta-fields.php b/tests/phpunit/tests/rest-api/rest-post-meta-fields.php index dc7c72e..92cd225 100644
a b class WP_Test_REST_Post_Meta_Fields extends WP_Test_REST_TestCase { 120 120 ) 121 121 ); 122 122 123 register_meta( 'post', 'test_sanitized', array( 124 'single' => true, 125 'show_in_rest' => true, 126 'type' => 'string', 127 'sanitize_callback' => array( $this, 'set_duplicate_single_value_after_sanitization_sanitize_callback' ), 128 ) ); 129 123 130 /** @var WP_REST_Server $wp_rest_server */ 124 131 global $wp_rest_server; 125 132 $this->server = $wp_rest_server = new Spy_REST_Server; … … class WP_Test_REST_Post_Meta_Fields extends WP_Test_REST_TestCase { 355 362 $this->assertEquals( 'test_value', $meta['test_single'] ); 356 363 } 357 364 365 public function test_set_duplicate_single_value_after_sanitization() { 366 367 $value = 'abc5def'; 368 $sanitized = 'abcdef'; 369 update_post_meta( self::$post_id, 'test_sanitized', $value ); 370 371 $this->grant_write_permission(); 372 373 $data = array( 374 'meta' => array( 375 'test_sanitized' => $value, 376 ), 377 ); 378 $request = new WP_REST_Request( 'POST', sprintf( '/wp/v2/posts/%d', self::$post_id ) ); 379 $request->set_body_params( $data ); 380 381 $response = $this->server->dispatch( $request ); 382 $this->assertEquals( 200, $response->get_status() ); 383 384 $meta = get_post_meta( self::$post_id, 'test_sanitized', true ); 385 $this->assertNotEmpty( $meta ); 386 $this->assertEquals( $sanitized, $meta ); 387 388 $data = $response->get_data(); 389 $meta = (array) $data['meta']; 390 $this->assertArrayHasKey( 'test_sanitized', $meta ); 391 $this->assertEquals( $sanitized, $meta['test_sanitized'] ); 392 } 393 394 public function set_duplicate_single_value_after_sanitization_sanitize_callback( $value ) { 395 return preg_replace( '/[^a-z]/', '', $value ); 396 } 397 358 398 /** 359 399 * @depends test_set_value 360 400 */