Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions ext/bcmath/bcmath.c
Original file line number Diff line number Diff line change
Expand Up @@ -971,6 +971,12 @@ static zval *bcmath_number_read_property(zend_object *obj, zend_string *name, in
return zend_std_read_property(obj, name, type, cache_slot, rv);
}

static zval *bcmath_number_get_property_ptr_ptr(zend_object *object, zend_string *member, int type, void **cache_slot)
{
/* Must always go through read property because all properties are virtual, and no dynamic properties are allowed. */
return NULL;
}

static int bcmath_number_has_property(zend_object *obj, zend_string *name, int check_empty, void **cache_slot)
{
if (check_empty == ZEND_PROPERTY_NOT_EMPTY) {
Expand Down Expand Up @@ -1014,6 +1020,7 @@ static void bcmath_number_register_class(void)
bcmath_number_obj_handlers.unset_property = bcmath_number_unset_property;
bcmath_number_obj_handlers.has_property = bcmath_number_has_property;
bcmath_number_obj_handlers.read_property = bcmath_number_read_property;
bcmath_number_obj_handlers.get_property_ptr_ptr = bcmath_number_get_property_ptr_ptr;
bcmath_number_obj_handlers.get_properties_for = bcmath_number_get_properties_for;
bcmath_number_obj_handlers.cast_object = bcmath_number_cast_object;
}
Expand Down
13 changes: 13 additions & 0 deletions ext/bcmath/tests/number/gh18641.phpt
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
--TEST--
GH-18641 (Accessing a BcMath\Number property by ref crashes)
--EXTENSIONS--
bcmath
--FILE--
<?php
$a = new BCMath\Number("1");
$fusion = $a;
$x = &$fusion->value;
var_dump($x);
?>
--EXPECT--
string(1) "1"