From 8e5b38100411d3b8fa4486c7c41dec7dedb4b474 Mon Sep 17 00:00:00 2001 From: Nikita Popov Date: Thu, 5 May 2016 17:28:52 +0200 Subject: [PATCH] Fix bug #72162 (again) Not sure what the previous fix was supposed to do. The issue was that error_reporting() simply assumes that the value must either be an integer or a string. Fixed by using zpp properly. --- Zend/zend_builtin_functions.c | 15 +++++---------- 1 file changed, 5 insertions(+), 10 deletions(-) diff --git a/Zend/zend_builtin_functions.c b/Zend/zend_builtin_functions.c index 558a1b2ac6..7716d3e59b 100644 --- a/Zend/zend_builtin_functions.c +++ b/Zend/zend_builtin_functions.c @@ -689,23 +689,22 @@ ZEND_FUNCTION(each) Return the current error_reporting level, and if an argument was passed - change to the new level */ ZEND_FUNCTION(error_reporting) { - zval *err; + zend_long err; int old_error_reporting; #ifndef FAST_ZPP - if (zend_parse_parameters(ZEND_NUM_ARGS(), "|z", &err) == FAILURE) { + if (zend_parse_parameters(ZEND_NUM_ARGS(), "|l", &err) == FAILURE) { return; } #else ZEND_PARSE_PARAMETERS_START(0, 1) Z_PARAM_OPTIONAL - Z_PARAM_ZVAL(err) + Z_PARAM_LONG(err) ZEND_PARSE_PARAMETERS_END(); #endif old_error_reporting = EG(error_reporting); if (ZEND_NUM_ARGS() != 0) { - zend_string *new_val = zval_get_string(err); do { zend_ini_entry *p = EG(error_reporting_ini_entry); @@ -731,12 +730,8 @@ ZEND_FUNCTION(error_reporting) zend_string_release(p->value); } - p->value = new_val; - if (Z_TYPE_P(err) == IS_LONG) { - EG(error_reporting) = Z_LVAL_P(err); - } else { - EG(error_reporting) = atoi(ZSTR_VAL(p->value)); - } + p->value = zend_long_to_str(err); + EG(error_reporting) = err; } while (0); } -- 2.40.0