Casting objects to bool is supposed to yield `true`. Since the
`cast_object` handler is required now, we have to implement the
`_IS_BOOL` conversion there.
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)
}
convert_to_string(writeobj);
return SUCCESS;
+ } else if (type == _IS_BOOL) {
+ ZVAL_TRUE(writeobj);
+ return SUCCESS;
}
return FAILURE;
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) /* {{{ */
--- /dev/null
+--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)