php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
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
Status: Closed Package: Scripting Engine problem
PHP Version: 5.3.2 OS: Windows, Linux
Private report: No CVE-ID:
 [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

Add a Patch

Pull Requests

Add a Pull Request

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2010-05-12 08:16 UTC] mike@php.net
-Status: Open +Status: Bogus
 [2010-05-12 08:16 UTC] mike@php.net
Thank you for taking the time to write to us, but this is not
a bug. Please double-check the documentation available at
http://www.php.net/manual/ and the instructions on how to report
a bug at http://bugs.php.net/how-to-report.php


 [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 01:02 UTC] philip@php.net
-Status: Bogus +Status: Open
 [2010-05-13 01:02 UTC] philip@php.net
I don't see this change mentioned at any of the following locations:
 - http://php.net/php5news
 - http://php.net/migration53
 - http://php.net/function.constant

Therefore, it can't be completely bogus. Please explain if this BC break in 5_3 
is intentional. constant('IDONOTEXIST') still returns NULL however, with 
E_WARNING instead of E_FATAL.
 [2010-05-13 03:16 UTC] bjori@php.net
-Status: Open +Status: Verified -Package: Reproducible crash +Package: Scripting Engine problem
 [2010-05-13 03:16 UTC] bjori@php.net
This is definitely a bug.
 [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
Automatic comment from SVN on behalf of felipe
Revision: http://svn.php.net/viewvc/?view=revision&revision=299320
Log: - Fixed bug #51791 (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.
 [2010-05-17 13:05 UTC] felipe@php.net
Oops, s/E_FATAL/E_ERROR/ :)
 
PHP Copyright © 2001-2014 The PHP Group
All rights reserved.
Last updated: Sun Apr 20 21:01:56 2014 UTC