Skip to content

Commit c924af0

Browse files
committed
Merge branch 'PHP-8.2' into PHP-8.3
* PHP-8.2: Fix GH-16397: Segmentation fault when comparing FFI object (#16401)
2 parents 817d21e + ec8a24f commit c924af0

File tree

3 files changed

+26
-1
lines changed

3 files changed

+26
-1
lines changed

NEWS

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,10 @@ PHP NEWS
2626
. Fixed bug GH-16409 (Segfault in exif_thumbnail when not dealing with a
2727
real file). (nielsdos, cmb)
2828

29+
- FFI:
30+
. Fixed bug GH-16397 (Segmentation fault when comparing FFI object).
31+
(nielsdos)
32+
2933
- GD:
3034
. Fixed bug GH-16334 (imageaffine overflow on matrix elements).
3135
(David Carlier)

ext/ffi/ffi.c

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2936,6 +2936,12 @@ static zend_function *zend_ffi_get_func(zend_object **obj, zend_string *name, co
29362936
}
29372937
/* }}} */
29382938

2939+
static int zend_fake_compare_objects(zval *o1, zval *o2)
2940+
{
2941+
zend_throw_error(zend_ffi_exception_ce, "Cannot compare FFI objects");
2942+
return ZEND_UNCOMPARABLE;
2943+
}
2944+
29392945
static zend_never_inline int zend_ffi_disabled(void) /* {{{ */
29402946
{
29412947
zend_throw_error(zend_ffi_exception_ce, "FFI API is restricted by \"ffi.enable\" configuration directive");
@@ -5436,7 +5442,7 @@ ZEND_MINIT_FUNCTION(ffi)
54365442
zend_ffi_handlers.has_dimension = zend_fake_has_dimension;
54375443
zend_ffi_handlers.unset_dimension = zend_fake_unset_dimension;
54385444
zend_ffi_handlers.get_method = zend_ffi_get_func;
5439-
zend_ffi_handlers.compare = NULL;
5445+
zend_ffi_handlers.compare = zend_fake_compare_objects;
54405446
zend_ffi_handlers.cast_object = zend_fake_cast_object;
54415447
zend_ffi_handlers.get_debug_info = NULL;
54425448
zend_ffi_handlers.get_closure = NULL;

ext/ffi/tests/gh16397.phpt

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
--TEST--
2+
GH-16397 (Segmentation fault when comparing FFI object)
3+
--EXTENSIONS--
4+
ffi
5+
--FILE--
6+
<?php
7+
$ffi = FFI::cdef();
8+
try {
9+
var_dump($ffi != 1);
10+
} catch (FFI\Exception $e) {
11+
echo $e->getMessage(), "\n";
12+
}
13+
?>
14+
--EXPECT--
15+
Cannot compare FFI objects

0 commit comments

Comments
 (0)