mirror of
git://develop.git.wordpress.org/
synced 2025-04-11 23:52:01 +02:00
REST API: Send a 500 status code when JSON encoding fails.
Previously, a 200 status code would be sent despite the 500 status code present in the response body. Props hermpheus, lalitjalandhar. Fixes #53056. git-svn-id: https://develop.svn.wordpress.org/trunk@51960 602fd350-edb4-49c9-b593-d223f7449a82
This commit is contained in:
parent
57ded3c85d
commit
07ad6efdf7
@ -497,6 +497,7 @@ class WP_REST_Server {
|
||||
$json_error_message = $this->get_json_last_error();
|
||||
|
||||
if ( $json_error_message ) {
|
||||
$this->set_status( 500 );
|
||||
$json_error_obj = new WP_Error(
|
||||
'rest_encode_error',
|
||||
$json_error_message,
|
||||
|
@ -6,6 +6,7 @@ class Spy_REST_Server extends WP_REST_Server {
|
||||
public $sent_body = '';
|
||||
public $last_request = null;
|
||||
public $override_by_default = false;
|
||||
public $status = null;
|
||||
|
||||
/**
|
||||
* Gets the raw $endpoints data from the server.
|
||||
@ -37,6 +38,14 @@ class Spy_REST_Server extends WP_REST_Server {
|
||||
$this->sent_headers[ $header ] = $value;
|
||||
}
|
||||
|
||||
/**
|
||||
* Stores last set status.
|
||||
* @param int $code HTTP status.
|
||||
*/
|
||||
public function set_status( $status ) {
|
||||
$this->status = $status;
|
||||
}
|
||||
|
||||
/**
|
||||
* Removes a header from the list of sent headers.
|
||||
*
|
||||
|
@ -2022,6 +2022,28 @@ class Tests_REST_Server extends WP_Test_REST_TestCase {
|
||||
$this->assertArrayHasKey( 'https://api.w.org/active-theme', $index->get_links() );
|
||||
}
|
||||
|
||||
/**
|
||||
* @ticket 53056
|
||||
*/
|
||||
public function test_json_encode_error_results_in_500_status_code() {
|
||||
register_rest_route(
|
||||
'test-ns/v1',
|
||||
'/test',
|
||||
array(
|
||||
array(
|
||||
'methods' => \WP_REST_Server::READABLE,
|
||||
'callback' => function() {
|
||||
return new \WP_REST_Response( INF );
|
||||
},
|
||||
'permission_callback' => '__return_true',
|
||||
'args' => array(),
|
||||
),
|
||||
)
|
||||
);
|
||||
rest_get_server()->serve_request( '/test-ns/v1/test' );
|
||||
$this->assertSame( 500, rest_get_server()->status );
|
||||
}
|
||||
|
||||
public function _validate_as_integer_123( $value, $request, $key ) {
|
||||
if ( ! is_int( $value ) ) {
|
||||
return new WP_Error( 'some-error', 'This is not valid!' );
|
||||
|
Loading…
x
Reference in New Issue
Block a user