From d4d2ec5974d3876b2a117c9bd30023b2915afe06 Mon Sep 17 00:00:00 2001 From: Michael Wallner Date: Fri, 17 Sep 2021 12:42:03 +0200 Subject: [PATCH] attempt to fix PHP-5 --- php_json_post.c | 37 +++++++++++++++++++++++++++++-------- php_json_post.h | 3 +++ 2 files changed, 32 insertions(+), 8 deletions(-) diff --git a/php_json_post.c b/php_json_post.c index 94e0e36..6922b51 100644 --- a/php_json_post.c +++ b/php_json_post.c @@ -41,16 +41,12 @@ static void php_json_post_init_globals(zend_json_post_globals *json_post_globals #endif } -#if PHP_VERSION_ID < 70000 -ZEND_EXTERN_MODULE_GLOBALS(json); -#endif - #ifndef TSRMLS_CC +# define TSRMLS_D # define TSRMLS_C # define TSRMLS_CC #endif - PHP_MINFO_FUNCTION(json_post) { php_info_print_table_start(); @@ -60,6 +56,24 @@ PHP_MINFO_FUNCTION(json_post) DISPLAY_INI_ENTRIES(); } +#if PHP_VERSION_ID < 70000 +# define JSON_POST_LAST_ERROR() json_post_last_error(TSRMLS_C) +static inline int json_post_last_error(TSRMLS_D) +{ + zend_long l; + zval *zv, **zv_ptr = &zv; + + ALLOC_ZVAL(zv); + JSON_POST_G(json_last_error)->internal_function.handler(0, zv, zv_ptr, NULL, 1); + l = Z_LVAL_P(zv); + FREE_ZVAL(zv); + + return l; +} +#else +# define JSON_POST_LAST_ERROR() JSON_G(error_code) +#endif + static SAPI_POST_HANDLER_FUNC(php_json_post_handler) { int module_number = 0; @@ -149,21 +163,23 @@ static SAPI_POST_HANDLER_FUNC(php_json_post_handler) # endif #endif - REGISTER_LONG_CONSTANT("JSON_POST_ERROR", JSON_G(error_code), CONST_CS); + REGISTER_LONG_CONSTANT("JSON_POST_ERROR", JSON_POST_LAST_ERROR(), CONST_CS); - if (JSON_G(error_code)) { + if (JSON_POST_LAST_ERROR()) { if (JSON_POST_G(onerror.response)) { sapi_header_op(SAPI_HEADER_SET_STATUS, (void *) (zend_long) JSON_POST_G(onerror.response) TSRMLS_CC); } if (JSON_POST_G(onerror.warning)) { - zend_error(E_WARNING, "json_post: json_decode failed with error code: %d", JSON_G(error_code)); + zend_error(E_WARNING, "json_post: json_decode failed with error code: %d", JSON_POST_LAST_ERROR()); } if (JSON_POST_G(onerror.exit)) { sapi_send_headers(TSRMLS_C); zend_bailout(); } +#if PHP_VERSION_ID >= 70000 && PHP_VERSION_ID < 80000 /* ext/json in PHP-7 fails to reset error_code in RINIT */ JSON_G(error_code) = 0; +#endif } } @@ -178,6 +194,11 @@ PHP_MINIT_FUNCTION(json_post) sapi_register_post_entries(json_post_entries TSRMLS_CC); ZEND_INIT_MODULE_GLOBALS(json_post, php_json_post_init_globals, NULL); + +#if PHP_VERSION_ID < 70000 + zend_hash_find(EG(function_table), ZEND_STRS("json_last_error"), (void **) &JSON_POST_G(json_last_error)); +#endif + REGISTER_INI_ENTRIES(); return SUCCESS; } diff --git a/php_json_post.h b/php_json_post.h index 2895b70..9623a44 100644 --- a/php_json_post.h +++ b/php_json_post.h @@ -41,6 +41,9 @@ ZEND_BEGIN_MODULE_GLOBALS(json_post) zend_bool warning; zend_bool exit; } onerror; +#if PHP_VERSION_ID < 70000 + zend_function *json_last_error; +#endif ZEND_END_MODULE_GLOBALS(json_post) ZEND_EXTERN_MODULE_GLOBALS(json_post); -- 2.30.2