]> granicus.if.org Git - php/commitdiff
Fixed bug #27731 (error_reporting() inside @ block fails to set
authorIlia Alshanetsky <iliaa@php.net>
Mon, 29 Mar 2004 00:50:52 +0000 (00:50 +0000)
committerIlia Alshanetsky <iliaa@php.net>
Mon, 29 Mar 2004 00:50:52 +0000 (00:50 +0000)
error_reporting level).

Zend/tests/bug27731.phpt [new file with mode: 0644]
Zend/zend_execute.c

diff --git a/Zend/tests/bug27731.phpt b/Zend/tests/bug27731.phpt
new file mode 100644 (file)
index 0000000..0c72d43
--- /dev/null
@@ -0,0 +1,10 @@
+--TEST--
+Bug #27731 (error_reporing() call inside @ block does not work correctly)
+--FILE--
+<?php
+       error_reporting(E_ALL ^ E_NOTICE);
+       @error_reporting(0);
+       var_dump(error_reporting());
+?>
+--EXPECT--
+int(0)
index 8051f3246ee326f617646c0410cda2aeb75cacd2..a15eee043c489d9e2770ef86dab95c788d707b2e 100644 (file)
@@ -4092,11 +4092,13 @@ int zend_end_silence_handler(ZEND_OPCODE_HANDLER_ARGS)
 {
        zval restored_error_reporting;
        
-       restored_error_reporting.type = IS_LONG;
-       restored_error_reporting.value.lval = EX_T(opline->op1.u.var).tmp_var.value.lval;
-       convert_to_string(&restored_error_reporting);
-       zend_alter_ini_entry("error_reporting", sizeof("error_reporting"), Z_STRVAL(restored_error_reporting), Z_STRLEN(restored_error_reporting), ZEND_INI_USER, ZEND_INI_STAGE_RUNTIME);
-       zendi_zval_dtor(restored_error_reporting);
+       if (EG(error_reporting)) {
+               restored_error_reporting.type = IS_LONG;
+               restored_error_reporting.value.lval = EX_T(opline->op1.u.var).tmp_var.value.lval;
+               convert_to_string(&restored_error_reporting);
+               zend_alter_ini_entry("error_reporting", sizeof("error_reporting"), Z_STRVAL(restored_error_reporting), Z_STRLEN(restored_error_reporting), ZEND_INI_USER, ZEND_INI_STAGE_RUNTIME);
+               zendi_zval_dtor(restored_error_reporting);
+       }
        NEXT_OPCODE();
 }