Bug #62694 [Ver->Csd]: Obtaining the value of inexistent dynamic properties should not be allowed

From: Date: Wed, 31 Oct 2018 17:33:28 +0000
Subject: Bug #62694 [Ver->Csd]: Obtaining the value of inexistent dynamic properties should not be allowed
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-217779@lists.php.net to get a copy of this message
Edit report at https://bugs.php.net/bug.php?id=62694&edit=1

 ID:                 62694
 Updated by:         cmb@php.net
 Reported by:        cataphract@php.net
 Summary:            Obtaining the value of inexistent dynamic properties
                     should not be allowed
-Status:             Verified
+Status:             Closed
 Type:               Bug
 Package:            Reflection related
 Operating System:   Irrelevant
 PHP Version:        *
-Assigned To:        
+Assigned To:        cmb
 Block user comment: N
 Private report:     N

 New Comment:

> getValue() should behave the same as accessing the property.

Okay.  As this happens for all actively supported PHP versions,
this ticket can be closed.


Previous Comments:
------------------------------------------------------------------------
[2018-09-06 00:28:24] nikic@php.net

I disagree that an exception should be thrown. getValue() should behave the same as accessing the
property. Accessing an undefined property generates a notice, so that's what should happen.

------------------------------------------------------------------------
[2018-09-05 14:22:03] cmb@php.net

> Not fixed in all versions.

This issue does not appear to have been fixed at all.  @cataphract
claims an exception should be thrown in this case (and I agree),
but only an E_NOTICE is issued.

It seems we would have to check whether the property is actually
defined before trying to get its value (something like
undef-dynamic-throw).

------------------------------------------------------------------------
[2018-09-05 14:21:33] cmb@php.net

The following patch has been added/updated:

Patch Name: undef-dynamic-throw
Revision:   1536157293
URL:        https://bugs.php.net/patch-display.php?bug=62694&patch=undef-dynamic-throw&revision=1536157293

------------------------------------------------------------------------
[2014-07-15 11:31:51] yohgaki@php.net

Not fixed in all versions.
http://3v4l.org/PHAvK

------------------------------------------------------------------------
[2012-07-30 11:35:20] cataphract@php.net

Description:
------------
The reflection extension does not allow obtaining ReflectionProperty objects for non existent
properties, much less fetch their non existent value. However, this can be bypassed by creating a
dynamic ReflectionProperty in another object.

Test script:
---------------
<?php
class A {}

$a = new A;
$a->foo = "dynamic property";
$ro = new ReflectionObject($a);
$prop = $ro->getProperty('foo');
try {
	var_dump($prop->getValue($a));
	var_dump($prop->getValue(new A));
} catch (ReflectionException $ex) {
	echo "Caught!\n";
	try {
		var_dump($prop->getValue(new A));
	} catch (ReflectionException $ex) {
		var_dump($ex->getMessage());
	}
}

Expected result:
----------------
string(16) "dynamic property"
Caught!
string(49) "Dynamic property does not exist in given instance"

Actual result:
--------------
string(16) "dynamic property"
NULL


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



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


Thread (7 messages)

« previous php.bugs (#217779) next »