diff options
Diffstat (limited to 'apcu-php81.patch')
-rw-r--r-- | apcu-php81.patch | 184 |
1 files changed, 184 insertions, 0 deletions
diff --git a/apcu-php81.patch b/apcu-php81.patch index 8abf332..63ce162 100644 --- a/apcu-php81.patch +++ b/apcu-php81.patch @@ -308,3 +308,187 @@ index 8959a44..56f7e10 100644 --FILE-- <?php +From ddc5a8b86f88495aa2da1e9df2f6d187c420c3c1 Mon Sep 17 00:00:00 2001 +From: Nikita Popov <nikita.ppv@gmail.com> +Date: Wed, 21 Jul 2021 14:10:49 +0200 +Subject: [PATCH] Add return types to APCUIterator + +For compatibility with tentative types added in PHP 8.1. +--- + apc_iterator.c | 10 ++++------ + apc_iterator.stub.php | 24 ++++++++--------------- + apc_iterator_arginfo.h | 20 +++++++++++-------- + apc_iterator_legacy_arginfo.h | 2 +- + tests/iterator_011.phpt | 37 +++++++++++++++++++++++++++++++++++ + 5 files changed, 62 insertions(+), 31 deletions(-) + create mode 100644 tests/iterator_011.phpt + +diff --git a/apc_iterator.c b/apc_iterator.c +index 712b59b..a268718 100644 +--- a/apc_iterator.c ++++ b/apc_iterator.c +@@ -429,7 +429,8 @@ PHP_METHOD(APCUIterator, current) { + + if (apc_stack_size(iterator->stack) == iterator->stack_idx) { + if (iterator->fetch(iterator) == 0) { +- RETURN_FALSE; ++ zend_throw_error(NULL, "Cannot call current() on invalid iterator"); ++ return; + } + } + +@@ -446,13 +447,10 @@ PHP_METHOD(APCUIterator, key) { + } + + ENSURE_INITIALIZED(iterator); +- if (apc_stack_size(iterator->stack) == 0) { +- RETURN_FALSE; +- } +- + if (apc_stack_size(iterator->stack) == iterator->stack_idx) { + if (iterator->fetch(iterator) == 0) { +- RETURN_FALSE; ++ zend_throw_error(NULL, "Cannot call key() on invalid iterator"); ++ return; + } + } + +diff --git a/apc_iterator.stub.php b/apc_iterator.stub.php +index 95b8ce3..11b981c 100644 +--- a/apc_iterator.stub.php ++++ b/apc_iterator.stub.php +@@ -13,27 +13,19 @@ public function __construct( + int $chunk_size = 0, + int $list = APC_LIST_ACTIVE); + +- /** @return void */ +- public function rewind(); ++ public function rewind(): void; + +- /** @return void */ +- public function next(); ++ public function next(): void; + +- /** @return bool */ +- public function valid(); ++ public function valid(): bool; + +- /** @return string|int|false */ +- public function key(); ++ public function key(): string|int; + +- /** @return mixed */ +- public function current(); ++ public function current(): mixed; + +- /** @return int */ +- public function getTotalHits(); ++ public function getTotalHits(): int; + +- /** @return int */ +- public function getTotalSize(); ++ public function getTotalSize(): int; + +- /** @return int */ +- public function getTotalCount(); ++ public function getTotalCount(): int; + } +diff --git a/apc_iterator_arginfo.h b/apc_iterator_arginfo.h +index 3c0ffb1..f1b8eb7 100644 +--- a/apc_iterator_arginfo.h ++++ b/apc_iterator_arginfo.h +@@ -1,5 +1,5 @@ + /* This is a generated file, edit the .stub.php file instead. +- * Stub hash: bb3222265846a53027ddd5c8da8106de9af8b0d5 */ ++ * Stub hash: e8a5a86d5bb9209117834ed0071130889e769c34 */ + + ZEND_BEGIN_ARG_INFO_EX(arginfo_class_APCUIterator___construct, 0, 0, 0) + ZEND_ARG_INFO_WITH_DEFAULT_VALUE(0, search, "null") +@@ -8,22 +8,26 @@ ZEND_BEGIN_ARG_INFO_EX(arginfo_class_APCUIterator___construct, 0, 0, 0) + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, list, IS_LONG, 0, "APC_LIST_ACTIVE") + ZEND_END_ARG_INFO() + +-ZEND_BEGIN_ARG_INFO_EX(arginfo_class_APCUIterator_rewind, 0, 0, 0) ++ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_APCUIterator_rewind, 0, 0, IS_VOID, 0) + ZEND_END_ARG_INFO() + + #define arginfo_class_APCUIterator_next arginfo_class_APCUIterator_rewind + +-#define arginfo_class_APCUIterator_valid arginfo_class_APCUIterator_rewind ++ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_APCUIterator_valid, 0, 0, _IS_BOOL, 0) ++ZEND_END_ARG_INFO() + +-#define arginfo_class_APCUIterator_key arginfo_class_APCUIterator_rewind ++ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_class_APCUIterator_key, 0, 0, MAY_BE_STRING|MAY_BE_LONG) ++ZEND_END_ARG_INFO() + +-#define arginfo_class_APCUIterator_current arginfo_class_APCUIterator_rewind ++ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_APCUIterator_current, 0, 0, IS_MIXED, 0) ++ZEND_END_ARG_INFO() + +-#define arginfo_class_APCUIterator_getTotalHits arginfo_class_APCUIterator_rewind ++ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_APCUIterator_getTotalHits, 0, 0, IS_LONG, 0) ++ZEND_END_ARG_INFO() + +-#define arginfo_class_APCUIterator_getTotalSize arginfo_class_APCUIterator_rewind ++#define arginfo_class_APCUIterator_getTotalSize arginfo_class_APCUIterator_getTotalHits + +-#define arginfo_class_APCUIterator_getTotalCount arginfo_class_APCUIterator_rewind ++#define arginfo_class_APCUIterator_getTotalCount arginfo_class_APCUIterator_getTotalHits + + + ZEND_METHOD(APCUIterator, __construct); +diff --git a/apc_iterator_legacy_arginfo.h b/apc_iterator_legacy_arginfo.h +index 4ddb156..4dc1fd7 100644 +--- a/apc_iterator_legacy_arginfo.h ++++ b/apc_iterator_legacy_arginfo.h +@@ -1,5 +1,5 @@ + /* This is a generated file, edit the .stub.php file instead. +- * Stub hash: bb3222265846a53027ddd5c8da8106de9af8b0d5 */ ++ * Stub hash: e8a5a86d5bb9209117834ed0071130889e769c34 */ + + ZEND_BEGIN_ARG_INFO_EX(arginfo_class_APCUIterator___construct, 0, 0, 0) + ZEND_ARG_INFO(0, search) +diff --git a/tests/iterator_011.phpt b/tests/iterator_011.phpt +new file mode 100644 +index 0000000..3d2d3f2 +--- /dev/null ++++ b/tests/iterator_011.phpt +@@ -0,0 +1,37 @@ ++--TEST-- ++APCUIterator key() and current() on invalid iterator ++--SKIPIF-- ++<?php require_once(dirname(__FILE__) . '/skipif.inc'); ?> ++--INI-- ++apc.enabled=1 ++apc.enable_cli=1 ++--FILE-- ++<?php ++ ++apcu_store("key1", "value1"); ++ ++$it = new APCuIterator(null, APC_ITER_VALUE); ++var_dump($it->key()); ++var_dump($it->current()); ++$it->next(); ++ ++try { ++ var_dump($it->key()); ++} catch (Error $e) { ++ echo $e->getMessage(), "\n"; ++} ++try { ++ var_dump($it->current()); ++} catch (Error $e) { ++ echo $e->getMessage(), "\n"; ++} ++ ++?> ++--EXPECT-- ++string(4) "key1" ++array(1) { ++ ["value"]=> ++ string(6) "value1" ++} ++Cannot call key() on invalid iterator ++Cannot call current() on invalid iterator |