summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--NEWS7
-rw-r--r--ext/ffi/ffi.c11
-rw-r--r--ext/ffi/tests/bug79749.phpt17
3 files changed, 33 insertions, 2 deletions
diff --git a/NEWS b/NEWS
index edaf30af76..84e904da44 100644
--- a/NEWS
+++ b/NEWS
@@ -1,6 +1,11 @@
PHP NEWS
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
-?? ??? ????, PHP 8.0.0alpha1
+?? ??? ????, PHP 8.0.0alpha2
+
+- FFI:
+ . Fixed bug #79749 (Converting FFI instances to bool fails). (cmb)
+
+25 Jun 2020, PHP 8.0.0alpha1
- Core:
. Removed the pdo_odbc.db2_instance_name php.ini directive. (Kalle)
diff --git a/ext/ffi/ffi.c b/ext/ffi/ffi.c
index 28baf1fd31..946f6c9845 100644
--- a/ext/ffi/ffi.c
+++ b/ext/ffi/ffi.c
@@ -1096,6 +1096,9 @@ again:
}
convert_to_string(writeobj);
return SUCCESS;
+ } else if (type == _IS_BOOL) {
+ ZVAL_TRUE(writeobj);
+ return SUCCESS;
}
return FAILURE;
@@ -4642,7 +4645,13 @@ static HashTable *zend_fake_get_gc(zend_object *ob, zval **table, int *n) /* {{{
static int zend_fake_cast_object(zend_object *obj, zval *result, int type)
{
- return FAILURE;
+ switch (type) {
+ case _IS_BOOL:
+ ZVAL_TRUE(result);
+ return SUCCESS;
+ default:
+ return FAILURE;
+ }
}
static ZEND_COLD zend_never_inline void zend_ffi_use_after_free(void) /* {{{ */
diff --git a/ext/ffi/tests/bug79749.phpt b/ext/ffi/tests/bug79749.phpt
new file mode 100644
index 0000000000..5e0862a207
--- /dev/null
+++ b/ext/ffi/tests/bug79749.phpt
@@ -0,0 +1,17 @@
+--TEST--
+Bug #79749 (Converting FFI instances to bool fails)
+--SKIPIF--
+<?php
+if (!extension_loaded('ffi')) die('skip ffi extension not available');
+?>
+--FILE--
+<?php
+$ffi = FFI::cdef('typedef int dummy;');
+var_dump((bool) $ffi);
+var_dump((bool) FFI::type('int'));
+var_dump((bool) FFI::new('int'));
+?>
+--EXPECT--
+bool(true)
+bool(true)
+bool(true)