1
0
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:
Dmitry Stogov
2020-02-17 12:48:55 +03:00
parent b01b1f65e7
commit 54ecf57fe2
4 changed files with 14 additions and 4 deletions

View File

@@ -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);

View File

@@ -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

View File

@@ -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

View File

@@ -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