diff --git a/src/wp-includes/rest-api.php b/src/wp-includes/rest-api.php index 5add20bc60..bdfd8fac42 100644 --- a/src/wp-includes/rest-api.php +++ b/src/wp-includes/rest-api.php @@ -1250,6 +1250,10 @@ function rest_validate_value_from_schema( $value, $args, $param = '' ) { } if ( 'object' === $args['type'] ) { + if ( '' === $value ) { + $value = array(); + } + if ( $value instanceof stdClass ) { $value = (array) $value; } diff --git a/tests/phpunit/tests/rest-api/rest-schema-sanitization.php b/tests/phpunit/tests/rest-api/rest-schema-sanitization.php index 1b2fd1d90c..fc100f7b2b 100644 --- a/tests/phpunit/tests/rest-api/rest-schema-sanitization.php +++ b/tests/phpunit/tests/rest-api/rest-schema-sanitization.php @@ -275,6 +275,13 @@ class WP_Test_REST_Schema_Sanitization extends WP_UnitTestCase { $this->assertEquals( array( 'a' => 1 ), rest_sanitize_value_from_schema( (object) array( 'a' => '1' ), $schema ) ); } + /** + * @ticket 42961 + */ + public function test_type_object_accepts_empty_string() { + $this->assertEquals( array(), rest_sanitize_value_from_schema( '', array( 'type' => 'object' ) ) ); + } + public function test_type_unknown() { $schema = array( 'type' => 'lalala', diff --git a/tests/phpunit/tests/rest-api/rest-schema-validation.php b/tests/phpunit/tests/rest-api/rest-schema-validation.php index 9c18a846dc..a6722d42a7 100644 --- a/tests/phpunit/tests/rest-api/rest-schema-validation.php +++ b/tests/phpunit/tests/rest-api/rest-schema-validation.php @@ -288,6 +288,13 @@ class WP_Test_REST_Schema_Validation extends WP_UnitTestCase { $this->assertTrue( rest_validate_value_from_schema( (object) array( 'a' => 1 ), $schema ) ); } + /** + * @ticket 42961 + */ + public function test_type_object_allows_empty_string() { + $this->assertTrue( rest_validate_value_from_schema( '', array( 'type' => 'object' ) ) ); + } + public function test_type_unknown() { $schema = array( 'type' => 'lalala',