From: Marcus Boerger Date: Sun, 9 Oct 2005 14:42:08 +0000 (+0000) Subject: - MFH Fix potential SEGV with overloaded objects X-Git-Tag: php-5.1.0RC2~62 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=de03dd63872d5e24a06691a8fafb5fa39054d81c;p=php - MFH Fix potential SEGV with overloaded objects --- diff --git a/ext/spl/spl_array.c b/ext/spl/spl_array.c index 822e5bd04d..d3d870d7d3 100755 --- a/ext/spl/spl_array.c +++ b/ext/spl/spl_array.c @@ -825,6 +825,15 @@ SPL_METHOD(Array, __construct) } intern->ar_flags |= ar_flags; ZVAL_ADDREF(intern->array); + if (Z_TYPE_P(array) == IS_OBJECT) { + zend_object_get_properties_t handler = Z_OBJ_HANDLER_P(array, get_properties); + if ((handler != std_object_handlers.get_properties && handler != spl_array_get_properties) + || !spl_array_get_hash_table(intern, 0 TSRMLS_CC)) { + php_set_error_handling(EH_NORMAL, NULL TSRMLS_CC); + zend_throw_exception_ex(spl_ce_InvalidArgumentException, 0 TSRMLS_CC, "Overloaded object of type %s is not compatible with %s", Z_OBJCE_P(array)->name, intern->std.ce->name); + return; + } + } spl_array_rewind(intern TSRMLS_CC);