Bug #68118 [NEW]: $a->foo .= 'test'; can leave $a->foo undefined
| From: | rasmus@php.net | Date: | Mon, 29 Sep 2014 15:30:23 +0000 |
| Subject: | Bug #68118 [NEW]: $a->foo .= 'test'; can leave $a->foo undefined | ||
| Groups: | php.bugs | ||
| Request: | Send a blank email to php-bugs+get-187753@lists.php.net to get a copy of this message | ||
From: rasmus
Operating system: Any
PHP version: 5.5.17
Package: Class/Object related
Bug Type: Bug
Bug description:$a->foo .= 'test'; can leave $a->foo undefined
Description:
------------
PHP 5.5 introduced a new undefined property notice for this case:
$a->undefined .= 'test';
This means that if a custom error handler is in place it will be
triggered, of course. There is a weird side-effect that can happen if
the error handler hits the same error causing the property name to be
overwritten. eg.
http://3v4l.org/KGXhF
Compare to:
http://3v4l.org/VPmLK
PHP 5.6 and PHP 7 are affected as well.
Test script:
---------------
<?php
class test {
public function __construct() {
$this->test = 'meow';
}
}
function error_handler() {
$test = new test();
return true;
}
set_error_handler("error_handler");
// test one
class a {}
$a = new a;
$a->undefined .= 'test';
echo isset($a->undefined) ? 'true' : 'false';
echo "\n";
// test two
$b .= 'test';
echo isset($b) ? 'true' : 'false';
echo "\n";
Expected result:
----------------
true
true
Actual result:
--------------
false
true
--
Edit bug report at https://bugs.php.net/bug.php?id=68118&edit=1
--
Try a snapshot (PHP 5.4): https://bugs.php.net/fix.php?id=68118&r=trysnapshot54
Try a snapshot (PHP 5.5): https://bugs.php.net/fix.php?id=68118&r=trysnapshot55
Try a snapshot (trunk): https://bugs.php.net/fix.php?id=68118&r=trysnapshottrunk
Fixed in SVN: https://bugs.php.net/fix.php?id=68118&r=fixed
Fixed in release: https://bugs.php.net/fix.php?id=68118&r=alreadyfixed
Need backtrace: https://bugs.php.net/fix.php?id=68118&r=needtrace
Need Reproduce Script: https://bugs.php.net/fix.php?id=68118&r=needscript
Try newer version: https://bugs.php.net/fix.php?id=68118&r=oldversion
Not developer issue: https://bugs.php.net/fix.php?id=68118&r=support
Expected behavior: https://bugs.php.net/fix.php?id=68118&r=notwrong
Not enough info: https://bugs.php.net/fix.php?id=68118&r=notenoughinfo
Submitted twice: https://bugs.php.net/fix.php?id=68118&r=submittedtwice
register_globals: https://bugs.php.net/fix.php?id=68118&r=globals
PHP 4 support discontinued: https://bugs.php.net/fix.php?id=68118&r=php4
Daylight Savings: https://bugs.php.net/fix.php?id=68118&r=dst
IIS Stability: https://bugs.php.net/fix.php?id=68118&r=isapi
Install GNU Sed: https://bugs.php.net/fix.php?id=68118&r=gnused
Floating point limitations: https://bugs.php.net/fix.php?id=68118&r=float
No Zend Extensions: https://bugs.php.net/fix.php?id=68118&r=nozend
MySQL Configuration Error: https://bugs.php.net/fix.php?id=68118&r=mysqlcfg