variant objects have no (declared) properties, so the `get_properties`
handlers returns a pointer to constant storage for efficiency reasons.
This pointer must not be returned from the `get_gc` handler, though;
instead we set up an own `get_gc` handler and return NULL from it, to
signal that there are no properties to collect.
(cmb)
. Fixed bug #79242 (COM error constants don't match com_exception codes on
x86). (cmb)
+ . Fixed bug #79247 (Garbage collecting variant objects segfaults). (cmb)
- CURL:
. Fixed bug #79019 (Copied cURL handles upload empty file). (cmb)
--- /dev/null
+--TEST--
+Bug #79247 (Garbage collecting variant objects segfaults)
+--SKIPIF--
+<?php
+if (!extension_loaded('com_dotnet')) die('skip com_dotnet extension not available');
+?>
+--FILE--
+<?php
+$keep = new variant(null);
+var_dump(gc_collect_cycles());
+?>
+--EXPECT--
+int(0)
return &zend_empty_array;
}
+static HashTable *com_get_gc(zval *object, zval **table, int *n)
+{
+ *table = NULL;
+ *n = 0;
+ return NULL;
+}
+
static void function_dtor(zval *zv)
{
zend_internal_function *f = (zend_internal_function*)Z_PTR_P(zv);
com_object_count,
NULL, /* get_debug_info */
NULL, /* get_closure */
- zend_std_get_gc, /* get_gc */
+ com_get_gc, /* get_gc */
};
void php_com_object_enable_event_sink(php_com_dotnet_object *obj, int enable)