From 946cadaf3d09f91b3a409aaa7132fb3b39509df8 Mon Sep 17 00:00:00 2001 From: Jonathan Desrosiers Date: Fri, 20 Sep 2019 20:15:51 +0000 Subject: [PATCH] Code Modernization: Remove JSON related polyfills. The PHP native JSON extension has been bundled and compiled with PHP by default since version 5.2.0. Because the minimum version of PHP required by WordPress is now 5.6.20 (see #46594 and [45058]), JSON extension related polyfills and backwards compatibility code can now be removed. This change removes the `json_last_error_msg()` and `JsonSerializable` polyfills included in WordPress for full JSON extension support in PHP < 5.6. Follow up of [46205-46206]. See #47699. Props jrf, Clorith, pento. git-svn-id: https://develop.svn.wordpress.org/trunk@46208 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-includes/compat.php | 126 ------------------------------------- 1 file changed, 126 deletions(-) diff --git a/src/wp-includes/compat.php b/src/wp-includes/compat.php index 9632afc842..c11e2d51a9 100644 --- a/src/wp-includes/compat.php +++ b/src/wp-includes/compat.php @@ -289,53 +289,6 @@ function _hash_hmac( $algo, $data, $key, $raw_output = false ) { return $hmac; } -if ( ! function_exists( 'json_encode' ) ) { - function json_encode( $string ) { - global $wp_json; - - if ( ! ( $wp_json instanceof Services_JSON ) ) { - require_once( ABSPATH . WPINC . '/class-json.php' ); - $wp_json = new Services_JSON(); - } - - return $wp_json->encodeUnsafe( $string ); - } -} - -if ( ! function_exists( 'json_decode' ) ) { - /** - * @global Services_JSON $wp_json - * @param string $string - * @param bool $assoc_array - * @return object|array - */ - function json_decode( $string, $assoc_array = false ) { - global $wp_json; - - if ( ! ( $wp_json instanceof Services_JSON ) ) { - require_once( ABSPATH . WPINC . '/class-json.php' ); - $wp_json = new Services_JSON(); - } - - $res = $wp_json->decode( $string ); - if ( $assoc_array ) { - $res = _json_decode_object_helper( $res ); - } - return $res; - } - - /** - * @param object $data - * @return array - */ - function _json_decode_object_helper( $data ) { - if ( is_object( $data ) ) { - $data = get_object_vars( $data ); - } - return is_array( $data ) ? array_map( __FUNCTION__, $data ) : $data; - } -} - if ( ! function_exists( 'hash_equals' ) ) : /** * Timing attack safe string comparison @@ -373,85 +326,6 @@ if ( ! function_exists( 'hash_equals' ) ) : } endif; -// JSON_PRETTY_PRINT was introduced in PHP 5.4 -// Defined here to prevent a notice when using it with wp_json_encode() -if ( ! defined( 'JSON_PRETTY_PRINT' ) ) { - define( 'JSON_PRETTY_PRINT', 128 ); -} - -if ( ! function_exists( 'json_last_error_msg' ) ) : - /** - * Retrieves the error string of the last json_encode() or json_decode() call. - * - * @since 4.4.0 - * - * @internal This is a compatibility function for PHP <5.5 - * - * @return bool|string Returns the error message on success, "No Error" if no error has occurred, - * or false on failure. - */ - function json_last_error_msg() { - // See https://core.trac.wordpress.org/ticket/27799. - if ( ! function_exists( 'json_last_error' ) ) { - return false; - } - - $last_error_code = json_last_error(); - - // Just in case JSON_ERROR_NONE is not defined. - $error_code_none = defined( 'JSON_ERROR_NONE' ) ? JSON_ERROR_NONE : 0; - - switch ( true ) { - case $last_error_code === $error_code_none: - return 'No error'; - - case defined( 'JSON_ERROR_DEPTH' ) && JSON_ERROR_DEPTH === $last_error_code: - return 'Maximum stack depth exceeded'; - - case defined( 'JSON_ERROR_STATE_MISMATCH' ) && JSON_ERROR_STATE_MISMATCH === $last_error_code: - return 'State mismatch (invalid or malformed JSON)'; - - case defined( 'JSON_ERROR_CTRL_CHAR' ) && JSON_ERROR_CTRL_CHAR === $last_error_code: - return 'Control character error, possibly incorrectly encoded'; - - case defined( 'JSON_ERROR_SYNTAX' ) && JSON_ERROR_SYNTAX === $last_error_code: - return 'Syntax error'; - - case defined( 'JSON_ERROR_UTF8' ) && JSON_ERROR_UTF8 === $last_error_code: - return 'Malformed UTF-8 characters, possibly incorrectly encoded'; - - case defined( 'JSON_ERROR_RECURSION' ) && JSON_ERROR_RECURSION === $last_error_code: - return 'Recursion detected'; - - case defined( 'JSON_ERROR_INF_OR_NAN' ) && JSON_ERROR_INF_OR_NAN === $last_error_code: - return 'Inf and NaN cannot be JSON encoded'; - - case defined( 'JSON_ERROR_UNSUPPORTED_TYPE' ) && JSON_ERROR_UNSUPPORTED_TYPE === $last_error_code: - return 'Type is not supported'; - - default: - return 'An unknown error occurred'; - } - } -endif; - -if ( ! interface_exists( 'JsonSerializable' ) ) { - define( 'WP_JSON_SERIALIZE_COMPATIBLE', true ); - /** - * JsonSerializable interface. - * - * Compatibility shim for PHP <5.4 - * - * @link https://secure.php.net/jsonserializable - * - * @since 4.4.0 - */ - interface JsonSerializable { - // phpcs:ignore WordPress.NamingConventions.ValidFunctionName.MethodNameInvalid - public function jsonSerialize(); - } -} - // random_int was introduced in PHP 7.0 if ( ! function_exists( 'random_int' ) ) { require ABSPATH . WPINC . '/random_compat/random.php';