Bug #63206 [Opn]: restore_error_handler does not restore previous errors mask

2013-10-05 Thread gwarnants at gmail dot com
Edit report at https://bugs.php.net/bug.php?id=63206&edit=1

 ID: 63206
 User updated by:gwarnants at gmail dot com
 Reported by:gwarnants at gmail dot com
 Summary:restore_error_handler does not restore previous
 errors mask
 Status: Open
 Type:   Bug
 Package:*General Issues
 Operating System:   Windows XP
 PHP Version:5.4.7
 Block user comment: N
 Private report: N

 New Comment:

Same problem in 5.3.4 on Windows


Previous Comments:

[2013-01-02 14:14:41] joe dot bowman at edigitalresearch dot com

Same problem in 5.4.8 on CentOS 6.3.


[2012-11-15 08:57:23] gwarnants at gmail dot com

Here is a simpler example to illustrate the problem. As you see, the 2nd 
trigger_error will not be caught because the error reporting isn't restored to 
its initial state.

set_error_handler('handler1', E_ALL);
trigger_error('notice 1',  E_USER_NOTICE); // OK
trigger_error('notice 2',  E_USER_NOTICE); // not caught !

function handler1($errrno, $errstr)
{
echo "HANDLER1 : $errstr\n";
set_error_handler('handler2', E_USER_WARNING);
restore_error_handler();
}

function handler2($errrno, $errstr)
{
}


[2012-10-17 04:57:25] gwarnants at gmail dot com

Any feedback ?


[2012-10-03 09:59:45] gwarnants at gmail dot com

Description:

Dear PHP Team,

I don't know if it's a bug but I discovered a strange behavior :

When setting a custom error handler, we can choose an error mask as a 2nd 
parameter to catch only some kinds of errors.
If I set 2 error handlers with differents masks, and trying to restore back my 
first handler by calling restore_error_handler(), my first handler is now 
running with the second error mask

Perhaps it is a normal behavior because set_error_handler() is setting a 
"global" error mask, but if it is, I think there is no
way to know the previous error_mask to restore it properly (that value isn't 
returned by error_reporting())

Regards,
Geoffray

Test script:
---
class CustomErrorHandler
{
public static function handler($errrno, $errstr)
{
echo "HANDLING: $errstr\n";

// i set an internal error_handler other catch WARNINGS ONLY
set_error_handler(array('CustomErrorHandler', 'internal_handler'), 
E_WARNING|E_USER_WARNING);
fopen('file_not_found.dat', 'r');   // will trigger a E_WARNING
restore_error_handler();// doing this i think previous handler will 
be restored to E_ALL... but it's not ??
}

private static function internal_handler($errrno, $errstr)
{
echo "  INTERNAL HANDLER: $errstr\n";
}
}


set_error_handler(array('CustomErrorHandler', 'handler'), E_ALL);

trigger_error('User notice 1',  E_USER_NOTICE);
trigger_error('User warning 1', E_USER_WARNING);
trigger_error('User notice 2',  E_USER_NOTICE); // will not be caught !
trigger_error('User warning 2', E_USER_WARNING);

Expected result:

HANDLING: User notice 1
  INTERNAL HANDLER: fopen(file_not_found.dat): failed to open stream: No such 
file or directory
HANDLING: User warning 1
  INTERNAL HANDLER: fopen(file_not_found.dat): failed to open stream: No such 
file or directory
HANDLING: User notice 2
  INTERNAL HANDLER: fopen(file_not_found.dat): failed to open stream: No such 
file or directory
HANDLING: User warning 2
  INTERNAL HANDLER: fopen(file_not_found.dat): failed to open stream: No such 
file or directory

Actual result:
--
HANDLING: User notice 1
  INTERNAL HANDLER: fopen(file_not_found.dat): failed to open stream: No such 
file or directory
HANDLING: User warning 1
  INTERNAL HANDLER: fopen(file_not_found.dat): failed to open stream: No such 
file or directory


Notice:  User notice 2 in D:\wamp\www\custom_error_handler.php on line 29

HANDLING: User warning 2
  INTERNAL HANDLER: fopen(file_not_found.dat): failed to open stream: No such 
file or directory






-- 
Edit this bug report at https://bugs.php.net/bug.php?id=63206&edit=1


Bug #63206 [Opn]: restore_error_handler does not restore previous errors mask

2012-11-15 Thread gwarnants at gmail dot com
Edit report at https://bugs.php.net/bug.php?id=63206&edit=1

 ID: 63206
 User updated by:gwarnants at gmail dot com
 Reported by:gwarnants at gmail dot com
 Summary:restore_error_handler does not restore previous
 errors mask
 Status: Open
 Type:   Bug
 Package:*General Issues
 Operating System:   Windows XP
 PHP Version:5.4.7
 Block user comment: N
 Private report: N

 New Comment:

Here is a simpler example to illustrate the problem. As you see, the 2nd 
trigger_error will not be caught because the error reporting isn't restored to 
its initial state.

set_error_handler('handler1', E_ALL);
trigger_error('notice 1',  E_USER_NOTICE); // OK
trigger_error('notice 2',  E_USER_NOTICE); // not caught !

function handler1($errrno, $errstr)
{
echo "HANDLER1 : $errstr\n";
set_error_handler('handler2', E_USER_WARNING);
restore_error_handler();
}

function handler2($errrno, $errstr)
{
}


Previous Comments:

[2012-10-17 04:57:25] gwarnants at gmail dot com

Any feedback ?


[2012-10-03 09:59:45] gwarnants at gmail dot com

Description:

Dear PHP Team,

I don't know if it's a bug but I discovered a strange behavior :

When setting a custom error handler, we can choose an error mask as a 2nd 
parameter to catch only some kinds of errors.
If I set 2 error handlers with differents masks, and trying to restore back my 
first handler by calling restore_error_handler(), my first handler is now 
running with the second error mask

Perhaps it is a normal behavior because set_error_handler() is setting a 
"global" error mask, but if it is, I think there is no
way to know the previous error_mask to restore it properly (that value isn't 
returned by error_reporting())

Regards,
Geoffray

Test script:
---
class CustomErrorHandler
{
public static function handler($errrno, $errstr)
{
echo "HANDLING: $errstr\n";

// i set an internal error_handler other catch WARNINGS ONLY
set_error_handler(array('CustomErrorHandler', 'internal_handler'), 
E_WARNING|E_USER_WARNING);
fopen('file_not_found.dat', 'r');   // will trigger a E_WARNING
restore_error_handler();// doing this i think previous handler will 
be restored to E_ALL... but it's not ??
}

private static function internal_handler($errrno, $errstr)
{
echo "  INTERNAL HANDLER: $errstr\n";
}
}


set_error_handler(array('CustomErrorHandler', 'handler'), E_ALL);

trigger_error('User notice 1',  E_USER_NOTICE);
trigger_error('User warning 1', E_USER_WARNING);
trigger_error('User notice 2',  E_USER_NOTICE); // will not be caught !
trigger_error('User warning 2', E_USER_WARNING);

Expected result:

HANDLING: User notice 1
  INTERNAL HANDLER: fopen(file_not_found.dat): failed to open stream: No such 
file or directory
HANDLING: User warning 1
  INTERNAL HANDLER: fopen(file_not_found.dat): failed to open stream: No such 
file or directory
HANDLING: User notice 2
  INTERNAL HANDLER: fopen(file_not_found.dat): failed to open stream: No such 
file or directory
HANDLING: User warning 2
  INTERNAL HANDLER: fopen(file_not_found.dat): failed to open stream: No such 
file or directory

Actual result:
--
HANDLING: User notice 1
  INTERNAL HANDLER: fopen(file_not_found.dat): failed to open stream: No such 
file or directory
HANDLING: User warning 1
  INTERNAL HANDLER: fopen(file_not_found.dat): failed to open stream: No such 
file or directory


Notice:  User notice 2 in D:\wamp\www\custom_error_handler.php on line 29

HANDLING: User warning 2
  INTERNAL HANDLER: fopen(file_not_found.dat): failed to open stream: No such 
file or directory






-- 
Edit this bug report at https://bugs.php.net/bug.php?id=63206&edit=1


Bug #63206 [Opn]: restore_error_handler does not restore previous errors mask

2012-10-16 Thread gwarnants at gmail dot com
Edit report at https://bugs.php.net/bug.php?id=63206&edit=1

 ID: 63206
 User updated by:gwarnants at gmail dot com
 Reported by:gwarnants at gmail dot com
 Summary:restore_error_handler does not restore previous
 errors mask
 Status: Open
 Type:   Bug
 Package:*General Issues
 Operating System:   Windows XP
 PHP Version:5.4.7
 Block user comment: N
 Private report: N

 New Comment:

Any feedback ?


Previous Comments:

[2012-10-03 09:59:45] gwarnants at gmail dot com

Description:

Dear PHP Team,

I don't know if it's a bug but I discovered a strange behavior :

When setting a custom error handler, we can choose an error mask as a 2nd 
parameter to catch only some kinds of errors.
If I set 2 error handlers with differents masks, and trying to restore back my 
first handler by calling restore_error_handler(), my first handler is now 
running with the second error mask

Perhaps it is a normal behavior because set_error_handler() is setting a 
"global" error mask, but if it is, I think there is no
way to know the previous error_mask to restore it properly (that value isn't 
returned by error_reporting())

Regards,
Geoffray

Test script:
---
class CustomErrorHandler
{
public static function handler($errrno, $errstr)
{
echo "HANDLING: $errstr\n";

// i set an internal error_handler other catch WARNINGS ONLY
set_error_handler(array('CustomErrorHandler', 'internal_handler'), 
E_WARNING|E_USER_WARNING);
fopen('file_not_found.dat', 'r');   // will trigger a E_WARNING
restore_error_handler();// doing this i think previous handler will 
be restored to E_ALL... but it's not ??
}

private static function internal_handler($errrno, $errstr)
{
echo "  INTERNAL HANDLER: $errstr\n";
}
}


set_error_handler(array('CustomErrorHandler', 'handler'), E_ALL);

trigger_error('User notice 1',  E_USER_NOTICE);
trigger_error('User warning 1', E_USER_WARNING);
trigger_error('User notice 2',  E_USER_NOTICE); // will not be caught !
trigger_error('User warning 2', E_USER_WARNING);

Expected result:

HANDLING: User notice 1
  INTERNAL HANDLER: fopen(file_not_found.dat): failed to open stream: No such 
file or directory
HANDLING: User warning 1
  INTERNAL HANDLER: fopen(file_not_found.dat): failed to open stream: No such 
file or directory
HANDLING: User notice 2
  INTERNAL HANDLER: fopen(file_not_found.dat): failed to open stream: No such 
file or directory
HANDLING: User warning 2
  INTERNAL HANDLER: fopen(file_not_found.dat): failed to open stream: No such 
file or directory

Actual result:
--
HANDLING: User notice 1
  INTERNAL HANDLER: fopen(file_not_found.dat): failed to open stream: No such 
file or directory
HANDLING: User warning 1
  INTERNAL HANDLER: fopen(file_not_found.dat): failed to open stream: No such 
file or directory


Notice:  User notice 2 in D:\wamp\www\custom_error_handler.php on line 29

HANDLING: User warning 2
  INTERNAL HANDLER: fopen(file_not_found.dat): failed to open stream: No such 
file or directory






-- 
Edit this bug report at https://bugs.php.net/bug.php?id=63206&edit=1