diff --git src/wp-includes/rest-api/class-wp-rest-server.php src/wp-includes/rest-api/class-wp-rest-server.php
index f9e35bdcbf..1f1d52966d 100644
|
|
class WP_REST_Server { |
497 | 497 | $json_error_message = $this->get_json_last_error(); |
498 | 498 | |
499 | 499 | if ( $json_error_message ) { |
| 500 | $this->set_status( 500 ); |
500 | 501 | $json_error_obj = new WP_Error( |
501 | 502 | 'rest_encode_error', |
502 | 503 | $json_error_message, |
diff --git tests/phpunit/includes/spy-rest-server.php tests/phpunit/includes/spy-rest-server.php
index 596117347c..5bfd1d2dba 100644
|
|
class Spy_REST_Server extends WP_REST_Server { |
6 | 6 | public $sent_body = ''; |
7 | 7 | public $last_request = null; |
8 | 8 | public $override_by_default = false; |
| 9 | public $status = null; |
9 | 10 | |
10 | 11 | /** |
11 | 12 | * Gets the raw $endpoints data from the server. |
… |
… |
class Spy_REST_Server extends WP_REST_Server { |
37 | 38 | $this->sent_headers[ $header ] = $value; |
38 | 39 | } |
39 | 40 | |
| 41 | /** |
| 42 | * Stores last set status. |
| 43 | * @param int $code HTTP status. |
| 44 | */ |
| 45 | public function set_status( $status ) { |
| 46 | $this->status = $status; |
| 47 | } |
| 48 | |
40 | 49 | /** |
41 | 50 | * Removes a header from the list of sent headers. |
42 | 51 | * |
diff --git tests/phpunit/tests/rest-api/rest-server.php tests/phpunit/tests/rest-api/rest-server.php
index 0dbc308bf9..672a5c2905 100644
|
|
class Tests_REST_Server extends WP_Test_REST_TestCase { |
2022 | 2022 | $this->assertArrayHasKey( 'https://api.w.org/active-theme', $index->get_links() ); |
2023 | 2023 | } |
2024 | 2024 | |
| 2025 | /** |
| 2026 | * @ticket 53056 |
| 2027 | */ |
| 2028 | public function test_json_encode_error_results_in_500_status_code() { |
| 2029 | register_rest_route( |
| 2030 | 'test-ns/v1', |
| 2031 | '/test', |
| 2032 | array( |
| 2033 | array( |
| 2034 | 'methods' => \WP_REST_Server::READABLE, |
| 2035 | 'callback' => function() { |
| 2036 | return new \WP_REST_Response( INF ); |
| 2037 | }, |
| 2038 | 'permission_callback' => '__return_true', |
| 2039 | 'args' => array(), |
| 2040 | ), |
| 2041 | ) |
| 2042 | ); |
| 2043 | rest_get_server()->serve_request( '/test-ns/v1/test' ); |
| 2044 | $this->assertSame( 500, rest_get_server()->status ); |
| 2045 | } |
| 2046 | |
2025 | 2047 | public function _validate_as_integer_123( $value, $request, $key ) { |
2026 | 2048 | if ( ! is_int( $value ) ) { |
2027 | 2049 | return new WP_Error( 'some-error', 'This is not valid!' ); |