diff --git a/NEWS b/NEWS index 429d83ae6f1..b90301307fc 100644 --- a/NEWS +++ b/NEWS @@ -30,6 +30,10 @@ PHP NEWS . Fixed bug GH-16409 (Segfault in exif_thumbnail when not dealing with a real file). (nielsdos, cmb) +- FFI: + . Fixed bug GH-16397 (Segmentation fault when comparing FFI object). + (nielsdos) + - GD: . Fixed bug GH-16334 (imageaffine overflow on matrix elements). (David Carlier) diff --git a/ext/ffi/ffi.c b/ext/ffi/ffi.c index 38d413c5043..2648162ae9c 100644 --- a/ext/ffi/ffi.c +++ b/ext/ffi/ffi.c @@ -2938,6 +2938,12 @@ static zend_function *zend_ffi_get_func(zend_object **obj, zend_string *name, co } /* }}} */ +static int zend_fake_compare_objects(zval *o1, zval *o2) +{ + zend_throw_error(zend_ffi_exception_ce, "Cannot compare FFI objects"); + return ZEND_UNCOMPARABLE; +} + static zend_never_inline int zend_ffi_disabled(void) /* {{{ */ { zend_throw_error(zend_ffi_exception_ce, "FFI API is restricted by \"ffi.enable\" configuration directive"); @@ -5443,7 +5449,7 @@ ZEND_MINIT_FUNCTION(ffi) zend_ffi_handlers.has_dimension = zend_fake_has_dimension; zend_ffi_handlers.unset_dimension = zend_fake_unset_dimension; zend_ffi_handlers.get_method = zend_ffi_get_func; - zend_ffi_handlers.compare = NULL; + zend_ffi_handlers.compare = zend_fake_compare_objects; zend_ffi_handlers.cast_object = zend_fake_cast_object; zend_ffi_handlers.get_debug_info = NULL; zend_ffi_handlers.get_closure = NULL; diff --git a/ext/ffi/tests/gh16397.phpt b/ext/ffi/tests/gh16397.phpt new file mode 100644 index 00000000000..19ddf7ecc62 --- /dev/null +++ b/ext/ffi/tests/gh16397.phpt @@ -0,0 +1,15 @@ +--TEST-- +GH-16397 (Segmentation fault when comparing FFI object) +--EXTENSIONS-- +ffi +--FILE-- +getMessage(), "\n"; +} +?> +--EXPECT-- +Cannot compare FFI objects