ID:               41633
 Updated by:       [EMAIL PROTECTED]
 Reported By:      m dot stach at ewerk dot com
-Status:           Open
+Status:           Closed
 Bug Type:         Reproducible crash
 Operating System: Windows/MacOSX
 PHP Version:      5.2.3
-Assigned To:      
+Assigned To:      dmitry
 New Comment:

This bug has been fixed in CVS.

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.




Previous Comments:
------------------------------------------------------------------------

[2007-06-11 08:50:57] m dot stach at ewerk dot com

Interestingly the following code gives an (however misleading) fatal
error:

class b {
        const FOO = self::FOO;
}

$a = b::FOO;

Fatal error: Cannot access self:: when no class scope is active in ...


I wonder why constants are processed at runtime not parse/compile time.
But that's not a bug but an architectural issue.

BTW: I would never expect the interpreter to crash.

------------------------------------------------------------------------

[2007-06-09 00:17:56] [EMAIL PROTECTED]

Just checking same constant wouldn't help since you could have:

const self::FOO = self::BAR;
const self::BAR = self::FOO;

but we can try and look into how to detect looping and either limit the
depth or just break the loop one way or another. 

------------------------------------------------------------------------

[2007-06-08 22:00:48] judas dot iscariote at gmail dot com

This is the expected behaviuor, as your code produced infinite
recursion FOO = self::FOO -> FOO = self::FOO -> FOO = self::FOO and the
interpreter ends crashing ( as expected)

However I suspect in this particular case, something can be done to
avoid this, maybe zval_update_constant_ex() can check if we ar trying to
assign a constant to the same constant and emit a nice fatal error, not
sure..though.

------------------------------------------------------------------------

[2007-06-08 13:38:29] m dot stach at ewerk dot com

Sorry, the expected result I specified was wrong.

Expected Result
---------------

I would expect error message (parse, compile or runtime/fatal error).

------------------------------------------------------------------------

[2007-06-08 13:35:19] m dot stach at ewerk dot com

Description:
------------
When instantiating classes with self-referencing constants PHP
crashes.

It is reproducable on Windows (5.2.3), Mac (5.2.2) and Linux (5.2.0).

Reproduce code:
---------------
class b {
  const FOO = self::FOO;
}

new b();

echo "1";

Expected result:
----------------
1

Actual result:
--------------
No output, segmentation fault instead. Since I don't have MSVC
available for backtrace, I tried on a mac and linux box, same result
(but Versions were 5.2.2 and 5.2.0).

Looks like an endless recursion.


Crash-Report:

Date/Time:      2007-06-08 14:55:00.261 +0200
OS Version:     10.4.9 (Build 8P135)
Report Version: 4

Command: php
Path:    /usr/local/bin/php
Parent:  bash [7590]

Version: ??? (???)

PID:    7604
Thread: 0

Exception:  EXC_BAD_ACCESS (0x0001)
Codes:      KERN_INVALID_ADDRESS (0x0001) at 0xbf7ffff0

Thread 0 Crashed:
0   php         0x004ae698 _zend_mm_alloc_int + 12
1   php         0x004afd48 _emalloc + 100
2   php         0x004b0410 _estrndup + 44
3   php         0x004c158c zend_get_constant_ex + 256
4   php         0x004c3470 zval_update_constant_ex + 340
5   php         0x004c3ca8 zval_update_constant + 44
6   php         0x004c171c zend_get_constant_ex + 656

lines 4-6 repeated

506 php         0x004c3ca8 zval_update_constant + 44
507 php         0x004c171c zend_get_constant_ex + 656
508 php         0x004c3470 zval_update_constant_ex + 340



------------------------------------------------------------------------


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

Reply via email to