From 4625fa181fd5e1c9b3d8ef291c7003bf51a70512 Mon Sep 17 00:00:00 2001 From: "Christoph M. Becker" Date: Wed, 9 Oct 2019 14:03:36 +0200 Subject: [PATCH] Fix #78650: new COM Crash As of PHP 7.4.0, the `get_property_ptr_ptr` handler is mandatory; we implement it to always return `NULL`, which is equivalent to not setting the handler in former versions. We add a portable and faster test case than what has been presented in the bug ticket. --- NEWS | 3 +++ ext/com_dotnet/com_handlers.c | 7 ++++++- ext/com_dotnet/tests/bug78650.phpt | 27 +++++++++++++++++++++++++++ 3 files changed, 36 insertions(+), 1 deletion(-) create mode 100644 ext/com_dotnet/tests/bug78650.phpt diff --git a/NEWS b/NEWS index ff37a024b1..2a54015954 100644 --- a/NEWS +++ b/NEWS @@ -11,6 +11,9 @@ PHP NEWS . Fixed bug #78644 (SEGFAULT in ZEND_UNSET_OBJ_SPEC_VAR_CONST_HANDLER). (Nikita) +- COM: + . Fixed bug #78650 (new COM Crash). (cmb) + - Iconv: . Fixed bug #78642 (Wrong libiconv version displayed). (gedas at martynas, cmb). diff --git a/ext/com_dotnet/com_handlers.c b/ext/com_dotnet/com_handlers.c index 0a4693fec5..8a70e60d76 100644 --- a/ext/com_dotnet/com_handlers.c +++ b/ext/com_dotnet/com_handlers.c @@ -174,6 +174,11 @@ static void com_write_dimension(zval *object, zval *offset, zval *value) } } +static zval *com_get_property_ptr_ptr(zval *object, zval *member, int type, void **cache_slot) +{ + return NULL; +} + #if 0 static void com_object_set(zval **property, zval *value) { @@ -546,7 +551,7 @@ zend_object_handlers php_com_object_handlers = { com_property_write, com_read_dimension, com_write_dimension, - NULL, + com_get_property_ptr_ptr, NULL, /* com_object_get, */ NULL, /* com_object_set, */ com_property_exists, diff --git a/ext/com_dotnet/tests/bug78650.phpt b/ext/com_dotnet/tests/bug78650.phpt new file mode 100644 index 0000000000..c362de95bb --- /dev/null +++ b/ext/com_dotnet/tests/bug78650.phpt @@ -0,0 +1,27 @@ +--TEST-- +Bug #78650 (new COM Crash) +--SKIPIF-- + +--FILE-- +GetFolder($fname); +$folder->ParentFolder->Name = 'baz'; + +print('OK'); +?> +--EXPECT-- +OK +--CLEAN-- + -- 2.40.0