1
0
mirror of https://github.com/php/php-src.git synced 2026-04-19 05:51:02 +02:00

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.
This commit is contained in:
Nikita Popov
2016-05-05 17:28:52 +02:00
parent 395863b1d1
commit 8e5b381004

View File

@@ -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);
}