Skip to content

Commit 0c3f707

Browse files
committed
Slightly clean up error_reporting() implementation
zend_long_to_str() cannot throw, and we don't really need the do/while block either.
1 parent 3bb62ee commit 0c3f707

File tree

1 file changed

+23
-29
lines changed

1 file changed

+23
-29
lines changed

Zend/zend_builtin_functions.c

Lines changed: 23 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -379,42 +379,36 @@ ZEND_FUNCTION(error_reporting)
379379
old_error_reporting = EG(error_reporting);
380380

381381
if (!err_is_null && err != old_error_reporting) {
382-
zend_string *new_val = zend_long_to_str(err);
383-
if (UNEXPECTED(!new_val)) {
384-
RETURN_THROWS();
385-
}
382+
zend_ini_entry *p = EG(error_reporting_ini_entry);
386383

387-
do {
388-
zend_ini_entry *p = EG(error_reporting_ini_entry);
384+
if (!p) {
385+
zval *zv = zend_hash_find_ex(EG(ini_directives), ZSTR_KNOWN(ZEND_STR_ERROR_REPORTING), 1);
386+
if (!zv) {
387+
/* Ini setting does not exist -- can this happen? */
388+
RETURN_LONG(old_error_reporting);
389+
}
389390

390-
if (!p) {
391-
zval *zv = zend_hash_find_ex(EG(ini_directives), ZSTR_KNOWN(ZEND_STR_ERROR_REPORTING), 1);
392-
if (zv) {
393-
p = EG(error_reporting_ini_entry) = (zend_ini_entry*)Z_PTR_P(zv);
394-
} else {
395-
break;
396-
}
391+
p = EG(error_reporting_ini_entry) = (zend_ini_entry*)Z_PTR_P(zv);
392+
}
393+
if (!p->modified) {
394+
if (!EG(modified_ini_directives)) {
395+
ALLOC_HASHTABLE(EG(modified_ini_directives));
396+
zend_hash_init(EG(modified_ini_directives), 8, NULL, NULL, 0);
397397
}
398-
if (!p->modified) {
399-
if (!EG(modified_ini_directives)) {
400-
ALLOC_HASHTABLE(EG(modified_ini_directives));
401-
zend_hash_init(EG(modified_ini_directives), 8, NULL, NULL, 0);
402-
}
403-
if (EXPECTED(zend_hash_add_ptr(EG(modified_ini_directives), ZSTR_KNOWN(ZEND_STR_ERROR_REPORTING), p) != NULL)) {
404-
p->orig_value = p->value;
405-
p->orig_modifiable = p->modifiable;
406-
p->modified = 1;
407-
}
408-
} else if (p->orig_value != p->value) {
409-
zend_string_release_ex(p->value, 0);
398+
if (EXPECTED(zend_hash_add_ptr(EG(modified_ini_directives), ZSTR_KNOWN(ZEND_STR_ERROR_REPORTING), p) != NULL)) {
399+
p->orig_value = p->value;
400+
p->orig_modifiable = p->modifiable;
401+
p->modified = 1;
410402
}
403+
} else if (p->orig_value != p->value) {
404+
zend_string_release_ex(p->value, 0);
405+
}
411406

412-
p->value = new_val;
413-
EG(error_reporting) = err;
414-
} while (0);
407+
p->value = zend_long_to_str(err);
408+
EG(error_reporting) = err;
415409
}
416410

417-
RETVAL_LONG(old_error_reporting);
411+
RETURN_LONG(old_error_reporting);
418412
}
419413
/* }}} */
420414

0 commit comments

Comments
 (0)