From db96a14fc177934451e0ccd7c4f4a15379812311 Mon Sep 17 00:00:00 2001 From: Dmitry Stogov Date: Thu, 26 Sep 2024 17:50:46 +0300 Subject: [PATCH 1/2] Fix FFI prototypes (these functions can't return NULL) --- ext/ffi/ffi.stub.php | 8 ++++---- ext/ffi/ffi_arginfo.h | 10 +++++----- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/ext/ffi/ffi.stub.php b/ext/ffi/ffi.stub.php index 0ed3cb32ac6ed..c71ccac29b716 100644 --- a/ext/ffi/ffi.stub.php +++ b/ext/ffi/ffi.stub.php @@ -11,11 +11,11 @@ final class FFI public static function cdef(string $code = "", ?string $lib = null): FFI {} - public static function load(string $filename): ?FFI {} + public static function load(string $filename): FFI {} public static function scope(string $name): FFI {} - public static function new(FFI\CType|string $type, bool $owned = true, bool $persistent = false): ?FFI\CData {} + public static function new(FFI\CType|string $type, bool $owned = true, bool $persistent = false): FFI\CData {} /** @prefer-ref $ptr */ public static function free(FFI\CData $ptr): void {} @@ -24,9 +24,9 @@ public static function free(FFI\CData $ptr): void {} * @param FFI\CData|int|float|bool|null $ptr * @prefer-ref $ptr */ - public static function cast(FFI\CType|string $type, $ptr): ?FFI\CData {} + public static function cast(FFI\CType|string $type, $ptr): FFI\CData {} - public static function type(string $type): ?FFI\CType {} + public static function type(string $type): FFI\CType {} /** @prefer-ref $ptr */ public static function typeof(FFI\CData $ptr): FFI\CType {} diff --git a/ext/ffi/ffi_arginfo.h b/ext/ffi/ffi_arginfo.h index 968a0979fb543..d8094f61b8439 100644 --- a/ext/ffi/ffi_arginfo.h +++ b/ext/ffi/ffi_arginfo.h @@ -1,12 +1,12 @@ /* This is a generated file, edit the .stub.php file instead. - * Stub hash: 1255ed4477be5b4361622aab54ebe37f42b1dada */ + * Stub hash: 04a8718a2d4b9f5c3e6d9706bf77708c24ce88d3 */ ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_class_FFI_cdef, 0, 0, FFI, 0) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, code, IS_STRING, 0, "\"\"") ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, lib, IS_STRING, 1, "null") ZEND_END_ARG_INFO() -ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_class_FFI_load, 0, 1, FFI, 1) +ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_class_FFI_load, 0, 1, FFI, 0) ZEND_ARG_TYPE_INFO(0, filename, IS_STRING, 0) ZEND_END_ARG_INFO() @@ -14,7 +14,7 @@ ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_class_FFI_scope, 0, 1, FFI, 0) ZEND_ARG_TYPE_INFO(0, name, IS_STRING, 0) ZEND_END_ARG_INFO() -ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_class_FFI_new, 0, 1, FFI\\CData, 1) +ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_class_FFI_new, 0, 1, FFI\\CData, 0) ZEND_ARG_OBJ_TYPE_MASK(0, type, FFI\\CType, MAY_BE_STRING, NULL) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, owned, _IS_BOOL, 0, "true") ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, persistent, _IS_BOOL, 0, "false") @@ -24,12 +24,12 @@ ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_FFI_free, 0, 1, IS_VOID, 0 ZEND_ARG_OBJ_INFO(ZEND_SEND_PREFER_REF, ptr, FFI\\CData, 0) ZEND_END_ARG_INFO() -ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_class_FFI_cast, 0, 2, FFI\\CData, 1) +ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_class_FFI_cast, 0, 2, FFI\\CData, 0) ZEND_ARG_OBJ_TYPE_MASK(0, type, FFI\\CType, MAY_BE_STRING, NULL) ZEND_ARG_INFO(ZEND_SEND_PREFER_REF, ptr) ZEND_END_ARG_INFO() -ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_class_FFI_type, 0, 1, FFI\\CType, 1) +ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_class_FFI_type, 0, 1, FFI\\CType, 0) ZEND_ARG_TYPE_INFO(0, type, IS_STRING, 0) ZEND_END_ARG_INFO() From 6f31e7e4119b287a654591dc0b97e5ea8735611c Mon Sep 17 00:00:00 2001 From: Dmitry Stogov Date: Thu, 26 Sep 2024 19:40:26 +0300 Subject: [PATCH 2/2] FFI::load() may return NULL in case of error during preload --- ext/ffi/ffi.stub.php | 2 +- ext/ffi/ffi_arginfo.h | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/ext/ffi/ffi.stub.php b/ext/ffi/ffi.stub.php index c71ccac29b716..3fb9ceee3dfa5 100644 --- a/ext/ffi/ffi.stub.php +++ b/ext/ffi/ffi.stub.php @@ -11,7 +11,7 @@ final class FFI public static function cdef(string $code = "", ?string $lib = null): FFI {} - public static function load(string $filename): FFI {} + public static function load(string $filename): ?FFI {} public static function scope(string $name): FFI {} diff --git a/ext/ffi/ffi_arginfo.h b/ext/ffi/ffi_arginfo.h index d8094f61b8439..563c9f8b8e8b1 100644 --- a/ext/ffi/ffi_arginfo.h +++ b/ext/ffi/ffi_arginfo.h @@ -1,12 +1,12 @@ /* This is a generated file, edit the .stub.php file instead. - * Stub hash: 04a8718a2d4b9f5c3e6d9706bf77708c24ce88d3 */ + * Stub hash: d3626f5d39317876fc7d4f240b0758f17f3472c8 */ ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_class_FFI_cdef, 0, 0, FFI, 0) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, code, IS_STRING, 0, "\"\"") ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, lib, IS_STRING, 1, "null") ZEND_END_ARG_INFO() -ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_class_FFI_load, 0, 1, FFI, 0) +ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_class_FFI_load, 0, 1, FFI, 1) ZEND_ARG_TYPE_INFO(0, filename, IS_STRING, 0) ZEND_END_ARG_INFO()