constant() aborts execution when fail to check undefined constant

Bug #51791 constant() aborts execution when fail to check undefined constant
Submitted: 2010-05-11 12:12 UTC Modified: 2010-05-17 13:05 UTC
From: iliavlad at mail dot ru Assigned: felipe (profile)
Status: Closed Package: Scripting Engine problem
PHP Version: 5.3.2 OS: Windows, Linux
Private report: No CVE-ID: None

 [2010-05-11 12:12 UTC] iliavlad at mail dot ru

Description:
------------
constant() failed to check undefined constant and php interpreter stoped, but constant() should return NULL and php interpreter should continue to work.

Test script:
---------------
class A 
{
    const B = 1;
}
var_dump(constant('A::B1'));
echo 5;


Expected result:
----------------
Warning: constant(): Couldn't find constant A::B1
NULL
5

Actual result:
--------------
>php -v 
PHP 5.3.2 (cli) (built: Mar 3 2010 19:40:13) 
Copyright (c) 1997-2010 The PHP Group 
Zend Engine v2.3.0, Copyright (c) 1998-2010 Zend Technologies 

>php -r "class A { const B = 1;} var_dump(@constant('A::B1')); echo 5;" 

>php -r "class A { const B = 1;} var_dump(constant('A::B1')); echo 5;" 

Fatal error: Undefined class constant 'A::B1' in Command line code on line 1 

Call Stack: 
0.0003 317608 1. {main}() Command line code:0 
0.0003 317688 2. constant() Command line code:1

Patches

Pull Requests

History

AllCommentsChangesGit/SVN commitsRelated reports

 [2010-05-12 08:16 UTC] mike@php.net

-Status: Open +Status: Bogus

 [2010-05-13 00:09 UTC] iliavlad at mail dot ru

Hi Mike,

according to manual http://php.net/manual/en/function.constant.php constant() eturns the value of the constant, or NULL if the constant is not defined. And this happens with php 5.2 version. With php 5.3 there is a fatal error and php interpreter stops. There are no words about fatal error in manual.

 [2010-05-13 03:16 UTC] bjori@php.net

-Status: Open +Status: Verified -Package: Reproducible crash +Package: Scripting Engine problem

 [2010-05-13 04:12 UTC] felipe@php.net

-Summary: constant() failed to check undefined constant and php interpreter stoped +Summary: constant() aborts execution when fail to check undefined constant

 [2010-05-13 04:13 UTC] felipe@php.net

-Status: Verified +Status: Closed -Assigned To: +Assigned To: felipe

 [2010-05-13 04:13 UTC] felipe@php.net

This bug has been fixed in SVN.

Snapshots of the sources are packaged every three hours; this change
will be in the next snapshot. You can grab the snapshot at
http://snaps.php.net/.
 
Thank you for the report, and for helping us make PHP better.


 [2010-05-17 08:12 UTC] mike@php.net

How's this a bug?

echo NOTEXISTS;
echo NOT::EXISTS;

 [2010-05-17 13:04 UTC] felipe@php.net

constant('not::exists') was issuing an E_FATAL.