diff --git a/src/wp-includes/rest-api/endpoints/class-wp-rest-posts-controller.php b/src/wp-includes/rest-api/endpoints/class-wp-rest-posts-controller.php index 9d7f85a8a7..6812c13dd6 100644 --- a/src/wp-includes/rest-api/endpoints/class-wp-rest-posts-controller.php +++ b/src/wp-includes/rest-api/endpoints/class-wp-rest-posts-controller.php @@ -1947,11 +1947,11 @@ class WP_REST_Posts_Controller extends WP_REST_Controller { */ public function validate_user_can_query_private_statuses( $value, $request, $parameter ) { if ( 'publish' === $value ) { - return true; + return rest_validate_request_arg( $value, $request, $parameter ); } $post_type_obj = get_post_type_object( $this->post_type ); if ( current_user_can( $post_type_obj->cap->edit_posts ) ) { - return true; + return rest_validate_request_arg( $value, $request, $parameter ); } return new WP_Error( 'rest_forbidden_status', __( 'Status is forbidden.' ), array( 'status' => rest_authorization_required_code() ) ); } diff --git a/tests/phpunit/tests/rest-api/rest-posts-controller.php b/tests/phpunit/tests/rest-api/rest-posts-controller.php index 648d74f116..dd86f9430c 100644 --- a/tests/phpunit/tests/rest-api/rest-posts-controller.php +++ b/tests/phpunit/tests/rest-api/rest-posts-controller.php @@ -240,6 +240,14 @@ class WP_Test_REST_Posts_Controller extends WP_Test_REST_Post_Type_Controller_Te $this->assertEquals( 1, count( $response->get_data() ) ); } + public function test_get_items_invalid_status_query() { + wp_set_current_user( 0 ); + $request = new WP_REST_Request( 'GET', '/wp/v2/posts' ); + $request->set_param( 'status', 'invalid' ); + $response = $this->server->dispatch( $request ); + $this->assertErrorResponse( 'rest_invalid_param', $response, 400 ); + } + public function test_get_items_status_without_permissions() { $draft_id = $this->factory->post->create( array( 'post_status' => 'draft',