From 5a357a452f284d2d13f07856387b5af91b87d261 Mon Sep 17 00:00:00 2001 From: Scott Taylor Date: Tue, 6 Oct 2015 02:45:26 +0000 Subject: [PATCH] REST API: add `json_last_error_msg()` compatibility function for PHP <5.5 to `compat.php` Props rmmcue. See #33982. Built from https://develop.svn.wordpress.org/trunk@34844 git-svn-id: http://core.svn.wordpress.org/trunk@34809 1a063a9b-81f0-0310-95a4-ce76da25c4cd --- wp-includes/compat.php | 56 +++++++++++++++++++++++++++++++++++++++++ wp-includes/version.php | 2 +- 2 files changed, 57 insertions(+), 1 deletion(-) diff --git a/wp-includes/compat.php b/wp-includes/compat.php index 553faeb1d8..b2308e8f22 100644 --- a/wp-includes/compat.php +++ b/wp-includes/compat.php @@ -260,3 +260,59 @@ endif; 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; \ No newline at end of file diff --git a/wp-includes/version.php b/wp-includes/version.php index ed98731b9f..4d9fb49055 100644 --- a/wp-includes/version.php +++ b/wp-includes/version.php @@ -4,7 +4,7 @@ * * @global string $wp_version */ -$wp_version = '4.4-alpha-34843'; +$wp_version = '4.4-alpha-34844'; /** * Holds the WordPress DB revision, increments when changes are made to the WordPress DB schema.