mirror of
https://github.com/php/php-src.git
synced 2026-04-02 13:43:02 +02:00
Disable instantiation of zero size FFI\CData objects
This commit is contained in:
@@ -3685,6 +3685,12 @@ ZEND_METHOD(FFI, new) /* {{{ */
|
||||
}
|
||||
}
|
||||
|
||||
if (type->size == 0) {
|
||||
zend_throw_error(zend_ffi_exception_ce, "Cannot instantiate FFI\\CData of zero size");
|
||||
zend_ffi_type_dtor(type_ptr);
|
||||
return;
|
||||
}
|
||||
|
||||
ptr = pemalloc(type->size, flags & ZEND_FFI_FLAG_PERSISTENT);
|
||||
memset(ptr, 0, type->size);
|
||||
|
||||
|
||||
@@ -6,13 +6,17 @@ FFI 023: GCC struct extensions
|
||||
ffi.enable=1
|
||||
--FILE--
|
||||
<?php
|
||||
var_dump(FFI::sizeof(FFI::new("struct {}")));
|
||||
try {
|
||||
var_dump(FFI::sizeof(FFI::new("struct {}")));
|
||||
} catch (Throwable $e) {
|
||||
echo get_class($e) . ": " . $e->getMessage() . "\n";
|
||||
}
|
||||
var_dump(FFI::sizeof(FFI::new("struct {int a}")));
|
||||
var_dump(FFI::sizeof(FFI::new("struct {int a; int b}")));
|
||||
?>
|
||||
ok
|
||||
--EXPECT--
|
||||
int(0)
|
||||
FFI\Exception: Cannot instantiate FFI\CData of zero size
|
||||
int(4)
|
||||
int(8)
|
||||
ok
|
||||
|
||||
@@ -81,7 +81,7 @@ FFI\ParserException: '[*]' not allowed in other than function prototype scope at
|
||||
FFI\ParserException: '[*]' not allowed in other than function prototype scope at line 1
|
||||
FFI\ParserException: '[*]' not allowed in other than function prototype scope at line 1
|
||||
ok
|
||||
int(0)
|
||||
FFI\Exception: Cannot instantiate FFI\CData of zero size
|
||||
FFI\ParserException: '[]' not allowed at line 1
|
||||
FFI\ParserException: '[]' not allowed at line 1
|
||||
ok
|
||||
|
||||
@@ -26,4 +26,4 @@ bool(false)
|
||||
|
||||
Warning: FFI::isNull() expects parameter 1 to be FFI\CData, null given in %s045.php on line %d
|
||||
NULL
|
||||
FFI\Exception: FFI\Cdata is not a pointer
|
||||
FFI\Exception: Cannot instantiate FFI\CData of zero size
|
||||
|
||||
Reference in New Issue
Block a user