diff --git src/wp-includes/rest-api/endpoints/class-wp-rest-posts-controller.php src/wp-includes/rest-api/endpoints/class-wp-rest-posts-controller.php
index 872a6607cb..7e3dcf3bca 100644
|
|
class WP_REST_Posts_Controller extends WP_REST_Controller { |
317 | 317 | } |
318 | 318 | |
319 | 319 | $max_pages = ceil( $total_posts / (int) $posts_query->query_vars['posts_per_page'] ); |
| 320 | |
| 321 | if ( $page > $max_pages ) { |
| 322 | return new WP_Error( 'rest_post_invalid_page_number', __( 'The page number requested is larger than the number of pages available.' ), array( 'status' => 400 ) ); |
| 323 | } |
| 324 | |
320 | 325 | $response = rest_ensure_response( $posts ); |
321 | 326 | |
322 | 327 | $response->header( 'X-WP-Total', (int) $total_posts ); |
diff --git tests/phpunit/tests/rest-api/rest-posts-controller.php tests/phpunit/tests/rest-api/rest-posts-controller.php
index 886ae3c5a6..e796e01d1e 100644
|
|
class WP_Test_REST_Posts_Controller extends WP_Test_REST_Post_Type_Controller_Te |
820 | 820 | $this->assertErrorResponse( 'rest_invalid_param', $response, 400 ); |
821 | 821 | } |
822 | 822 | |
| 823 | /** |
| 824 | * @ticket 39061 |
| 825 | */ |
| 826 | public function test_get_items_invalid_max_pages() { |
| 827 | // Out of bounds |
| 828 | $request = new WP_REST_Request( 'GET', '/wp/v2/posts' ); |
| 829 | $request->set_param( 'page', REST_TESTS_IMPOSSIBLY_HIGH_NUMBER ); |
| 830 | $response = $this->server->dispatch( $request ); |
| 831 | $this->assertErrorResponse( 'rest_post_invalid_page_number', $response, 400 ); |
| 832 | } |
| 833 | |
823 | 834 | public function test_get_items_invalid_context() { |
824 | 835 | $request = new WP_REST_Request( 'GET', '/wp/v2/posts' ); |
825 | 836 | $request->set_param( 'context', 'banana' ); |