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 (profile)
Status: Closed Package: Scripting Engine problem
PHP Version: 5.3.2 OS: Windows, Linux
Private report: No CVE-ID: None
Welcome back! If you're the original bug submitter, here's where you can edit the bug or add additional notes.
If you forgot your password, you can retrieve your password here.
Password:
Status:
Package:
Bug Type:
Summary:
From: iliavlad at mail dot ru
New email:
PHP Version: OS:

 

 [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-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-2024 The PHP Group
All rights reserved.
Last updated: Thu Nov 21 12:01:29 2024 UTC