diff options
-rw-r--r-- | 12845d5957b8af7c356e31f0d1be3d72986aab26.patch | 56 | ||||
-rw-r--r-- | apcu-upstream.patch | 253 | ||||
-rw-r--r-- | php-pecl-apcu.spec | 10 |
3 files changed, 260 insertions, 59 deletions
diff --git a/12845d5957b8af7c356e31f0d1be3d72986aab26.patch b/12845d5957b8af7c356e31f0d1be3d72986aab26.patch deleted file mode 100644 index a01267d..0000000 --- a/12845d5957b8af7c356e31f0d1be3d72986aab26.patch +++ /dev/null @@ -1,56 +0,0 @@ -From 12845d5957b8af7c356e31f0d1be3d72986aab26 Mon Sep 17 00:00:00 2001 -From: Nikita Popov <nikita.ppv@gmail.com> -Date: Sat, 15 Feb 2020 11:09:22 +0100 -Subject: [PATCH] Fork test for PHP 8 - ---- - tests/apc_store_reference.phpt | 2 ++ - tests/apc_store_reference_php8.phpt | 26 ++++++++++++++++++++++++++ - 2 files changed, 28 insertions(+) - create mode 100644 tests/apc_store_reference_php8.phpt - -diff --git a/tests/apc_store_reference.phpt b/tests/apc_store_reference.phpt -index 2228899..d2cb991 100644 ---- a/tests/apc_store_reference.phpt -+++ b/tests/apc_store_reference.phpt -@@ -4,6 +4,8 @@ The outermost value should always be a value, not a reference - apc.enabled=1 - apc.enable_cli=1 - apc.serializer=default -+--SKIPIF-- -+<?php if (PHP_VERSION_ID >= 80000) die('skip Requires PHP < 8.0.0'); ?> - --FILE-- - <?php - -diff --git a/tests/apc_store_reference_php8.phpt b/tests/apc_store_reference_php8.phpt -new file mode 100644 -index 0000000..1eae4bb ---- /dev/null -+++ b/tests/apc_store_reference_php8.phpt -@@ -0,0 +1,26 @@ -+--TEST-- -+The outermost value should always be a value, not a reference -+--INI-- -+apc.enabled=1 -+apc.enable_cli=1 -+apc.serializer=default -+--SKIPIF-- -+<?php if (PHP_VERSION_ID < 80000) die('skip Requires PHP >= 8.0.0'); ?> -+--FILE-- -+<?php -+ -+/* The output is different for the php serializer, because it does not replicate the -+ * cycle involving the top-level value. Instead the cycle is placed one level lower. -+ * I believe this is a bug in the php serializer. */ -+ -+$value = [&$value]; -+apcu_store(["key" => &$value]); -+$result = apcu_fetch("key"); -+var_dump($result); -+ -+?> -+--EXPECT-- -+array(1) { -+ [0]=> -+ *RECURSION* -+} diff --git a/apcu-upstream.patch b/apcu-upstream.patch new file mode 100644 index 0000000..9170b6a --- /dev/null +++ b/apcu-upstream.patch @@ -0,0 +1,253 @@ +diff --git a/apc_arginfo.h b/apc_arginfo.h +index 0bd61c9..8ba2686 100644 +--- a/apc_arginfo.h ++++ b/apc_arginfo.h +@@ -76,6 +76,10 @@ ZEND_BEGIN_ARG_INFO_EX(arginfo_apcu_entry, 0, 0, 2) + ZEND_ARG_TYPE_INFO(0, generator, IS_CALLABLE, 0) + ZEND_ARG_TYPE_INFO(0, ttl, IS_LONG, 0) + ZEND_END_ARG_INFO() ++ ++ZEND_BEGIN_ARG_INFO_EX(arginfo_apcu_inc_request_time, 0, 0, 0) ++ ZEND_ARG_INFO(0, by) ++ZEND_END_ARG_INFO() + /* }}} */ + + #endif +diff --git a/apc_globals.h b/apc_globals.h +index 74c8f27..87625c9 100644 +--- a/apc_globals.h ++++ b/apc_globals.h +@@ -62,7 +62,7 @@ ZEND_BEGIN_MODULE_GLOBALS(apcu) + + char *serializer_name; /* the serializer config option */ + +- volatile zend_bool recursion; ++ volatile unsigned recursion; + ZEND_END_MODULE_GLOBALS(apcu) + + /* (the following is defined in php_apc.c) */ +diff --git a/apc_iterator.c b/apc_iterator.c +index 302b086..f601a27 100644 +--- a/apc_iterator.c ++++ b/apc_iterator.c +@@ -297,7 +297,8 @@ static void apc_iterator_totals(apc_iterator_t *iterator) { + void apc_iterator_obj_init(apc_iterator_t *iterator, zval *search, zend_long format, zend_long chunk_size, zend_long list) + { + if (!APCG(enabled)) { +- apc_error("APC must be enabled to use " APC_ITERATOR_NAME); ++ zend_throw_error(NULL, "APC must be enabled to use " APC_ITERATOR_NAME); ++ return; + } + + if (chunk_size < 0) { +diff --git a/apc_signal.c b/apc_signal.c +index aff13c8..22504e5 100644 +--- a/apc_signal.c ++++ b/apc_signal.c +@@ -113,7 +113,7 @@ static void apc_rehandle_signal(int signo, siginfo_t *siginfo, void *context) + */ + static int apc_register_signal(int signo, void (*handler)(int, siginfo_t*, void*)) + { +- struct sigaction sa = {{0}}; ++ struct sigaction sa; + apc_signal_entry_t p_sig = {0}; + + if (sigaction(signo, NULL, &sa) == 0) { +diff --git a/apc_sma.c b/apc_sma.c +index da457d3..3150d92 100644 +--- a/apc_sma.c ++++ b/apc_sma.c +@@ -234,8 +234,8 @@ static APC_HOTSPOT size_t sma_deallocate(void* shmaddr, size_t offset) + block_t* nxt; /* the block after cur */ + size_t size; /* size of deallocated block */ + ++ assert(offset >= ALIGNWORD(sizeof(struct block_t))); + offset -= ALIGNWORD(sizeof(struct block_t)); +- assert(offset >= 0); + + /* find position of new block in free list */ + cur = BLOCKAT(offset); +diff --git a/php_apc.c b/php_apc.c +index ad9351d..e08a770 100644 +--- a/php_apc.c ++++ b/php_apc.c +@@ -93,7 +93,7 @@ static void php_apc_init_globals(zend_apcu_globals* apcu_globals) + apcu_globals->smart = 0; + apcu_globals->preload_path = NULL; + apcu_globals->coredump_unmap = 0; +- apcu_globals->use_request_time = 1; ++ apcu_globals->use_request_time = 0; + apcu_globals->serializer_name = NULL; + apcu_globals->recursion = 0; + } +@@ -151,7 +151,7 @@ STD_PHP_INI_BOOLEAN("apc.enable_cli", "0", PHP_INI_SYSTEM, OnUpdateBool, + STD_PHP_INI_BOOLEAN("apc.slam_defense", "0", PHP_INI_SYSTEM, OnUpdateBool, slam_defense, zend_apcu_globals, apcu_globals) + STD_PHP_INI_ENTRY("apc.preload_path", (char*)NULL, PHP_INI_SYSTEM, OnUpdateString, preload_path, zend_apcu_globals, apcu_globals) + STD_PHP_INI_BOOLEAN("apc.coredump_unmap", "0", PHP_INI_SYSTEM, OnUpdateBool, coredump_unmap, zend_apcu_globals, apcu_globals) +-STD_PHP_INI_BOOLEAN("apc.use_request_time", "1", PHP_INI_ALL, OnUpdateBool, use_request_time, zend_apcu_globals, apcu_globals) ++STD_PHP_INI_BOOLEAN("apc.use_request_time", "0", PHP_INI_ALL, OnUpdateBool, use_request_time, zend_apcu_globals, apcu_globals) + STD_PHP_INI_ENTRY("apc.serializer", "php", PHP_INI_SYSTEM, OnUpdateStringUnempty, serializer_name, zend_apcu_globals, apcu_globals) + PHP_INI_END() + +@@ -475,12 +475,14 @@ static void apc_store_helper(INTERNAL_FUNCTION_PARAMETERS, const zend_bool exclu + ZEND_HASH_FOREACH_KEY_VAL(hash, hkey_idx, hkey, hentry) { + ZVAL_DEREF(hentry); + if (hkey) { +- if (!apc_cache_store(apc_user_cache, hkey, hentry, (uint32_t) ttl, exclusive)) { +- zend_hash_add_new(Z_ARRVAL_P(return_value), hkey, &fail_zv); +- } ++ zend_string_addref(hkey); + } else { +- zend_hash_index_add_new(Z_ARRVAL_P(return_value), hkey_idx, &fail_zv); ++ hkey = zend_long_to_str(hkey_idx); ++ } ++ if (!apc_cache_store(apc_user_cache, hkey, hentry, (uint32_t) ttl, exclusive)) { ++ zend_symtable_add_new(Z_ARRVAL_P(return_value), hkey, &fail_zv); + } ++ zend_string_release(hkey); + } ZEND_HASH_FOREACH_END(); + return; + } else if (Z_TYPE_P(key) == IS_STRING) { +@@ -500,6 +502,9 @@ static void apc_store_helper(INTERNAL_FUNCTION_PARAMETERS, const zend_bool exclu + /* {{{ proto bool apcu_enabled(void) + returns true when apcu is usable in the current environment */ + PHP_FUNCTION(apcu_enabled) { ++ if (zend_parse_parameters_none() == FAILURE) { ++ return; ++ } + RETURN_BOOL(APCG(enabled)); + } + /* }}} */ +@@ -798,7 +803,7 @@ zend_function_entry apcu_functions[] = { + PHP_FE(apcu_exists, arginfo_apcu_exists) + PHP_FE(apcu_entry, arginfo_apcu_entry) + #ifdef APC_DEBUG +- PHP_FE(apcu_inc_request_time, NULL) ++ PHP_FE(apcu_inc_request_time, arginfo_apcu_inc_request_time) + #endif + PHP_FE_END + }; +diff --git a/tests/apc_disabled.phpt b/tests/apc_disabled.phpt +index 184a759..c3f9adf 100644 +--- a/tests/apc_disabled.phpt ++++ b/tests/apc_disabled.phpt +@@ -40,6 +40,13 @@ var_dump(apcu_cas("key", 10, 20)); + echo "\nentry\n"; + var_dump(apcu_entry("key", function() { return 42; })); + ++echo "\niterator\n"; ++try { ++ new APCUIterator; ++} catch (Error $e) { ++ echo $e->getMessage(), "\n"; ++} ++ + ?> + --EXPECTF-- + enabled +@@ -91,3 +98,6 @@ bool(false) + + entry + NULL ++ ++iterator ++APC must be enabled to use APCuIterator +diff --git a/tests/apc_entry_003.phpt b/tests/apc_entry_003.phpt +index f066583..e04bf4b 100644 +--- a/tests/apc_entry_003.phpt ++++ b/tests/apc_entry_003.phpt +@@ -13,4 +13,4 @@ $value = apcu_entry("test", function($key) { + }); + ?> + --EXPECTF-- +-Fatal error: Trait 'T' not found in %s on line %d ++Fatal error: %s +diff --git a/tests/apc_store_array_int_keys.phpt b/tests/apc_store_array_int_keys.phpt +new file mode 100644 +index 0000000..654f70c +--- /dev/null ++++ b/tests/apc_store_array_int_keys.phpt +@@ -0,0 +1,26 @@ ++--TEST-- ++apcu_store() with int keys in array should convert them to string ++--SKIPIF-- ++<?php ++require_once(__DIR__ . '/skipif.inc'); ++?> ++--INI-- ++apc.enabled=1 ++apc.enable_cli=1 ++--FILE-- ++<?php ++ ++var_dump(apcu_add(["123" => "test"])); ++var_dump(apcu_store(["123" => "test"])); ++var_dump(apcu_add(["123" => "test"])); ++ ++?> ++--EXPECT-- ++array(0) { ++} ++array(0) { ++} ++array(1) { ++ [123]=> ++ int(-1) ++} +diff --git a/tests/apc_store_reference.phpt b/tests/apc_store_reference.phpt +index 2228899..d2cb991 100644 +--- a/tests/apc_store_reference.phpt ++++ b/tests/apc_store_reference.phpt +@@ -4,6 +4,8 @@ The outermost value should always be a value, not a reference + apc.enabled=1 + apc.enable_cli=1 + apc.serializer=default ++--SKIPIF-- ++<?php if (PHP_VERSION_ID >= 80000) die('skip Requires PHP < 8.0.0'); ?> + --FILE-- + <?php + +diff --git a/tests/apc_store_reference_php8.phpt b/tests/apc_store_reference_php8.phpt +new file mode 100644 +index 0000000..1eae4bb +--- /dev/null ++++ b/tests/apc_store_reference_php8.phpt +@@ -0,0 +1,26 @@ ++--TEST-- ++The outermost value should always be a value, not a reference ++--INI-- ++apc.enabled=1 ++apc.enable_cli=1 ++apc.serializer=default ++--SKIPIF-- ++<?php if (PHP_VERSION_ID < 80000) die('skip Requires PHP >= 8.0.0'); ?> ++--FILE-- ++<?php ++ ++/* The output is different for the php serializer, because it does not replicate the ++ * cycle involving the top-level value. Instead the cycle is placed one level lower. ++ * I believe this is a bug in the php serializer. */ ++ ++$value = [&$value]; ++apcu_store(["key" => &$value]); ++$result = apcu_fetch("key"); ++var_dump($result); ++ ++?> ++--EXPECT-- ++array(1) { ++ [0]=> ++ *RECURSION* ++} +diff --git a/tests/server_test.inc b/tests/server_test.inc +index 2aede0c..75035a3 100644 +--- a/tests/server_test.inc ++++ b/tests/server_test.inc +@@ -44,6 +44,7 @@ function server_start_one($host, $port, $code = 'echo "Hello world";', $php_opts + $cmd .= " {$router}"; + } + ++ $descriptorspec[2] = array('pipe', 'w'); + $handle = proc_open(addslashes($cmd), $descriptorspec, $pipes, $doc_root, NULL, array("bypass_shell" => true, "suppress_errors" => true)); + } else { + $cmd = "exec {$php_executable} -n $php_args -t {$doc_root} -S $host:$port"; diff --git a/php-pecl-apcu.spec b/php-pecl-apcu.spec index 1047fb5..7a20853 100644 --- a/php-pecl-apcu.spec +++ b/php-pecl-apcu.spec @@ -36,14 +36,14 @@ URL: https://pecl.php.net/package/APCu Release: 0.7.%{gh_date}git%{gh_short}%{?dist}%{!?scl:%{!?nophptag:%(%{__php} -r 'echo ".".PHP_MAJOR_VERSION.".".PHP_MINOR_VERSION;')}} Source0: https://github.com/%{gh_owner}/%{gh_project}/archive/%{gh_commit}/%{pecl_name}-%{version}-%{gh_short}.tar.gz %else -Release: 2%{?dist}%{!?scl:%{!?nophptag:%(%{__php} -r 'echo ".".PHP_MAJOR_VERSION.".".PHP_MINOR_VERSION;')}} +Release: 3%{?dist}%{!?scl:%{!?nophptag:%(%{__php} -r 'echo ".".PHP_MAJOR_VERSION.".".PHP_MINOR_VERSION;')}} Source0: https://pecl.php.net/get/%{pecl_name}-%{version}.tgz %endif Source1: %{pecl_name}-5.1.2.ini Source2: %{pecl_name}-panel.conf Source3: %{pecl_name}.conf.php -Patch0: https://github.com/krakjoe/apcu/commit/12845d5957b8af7c356e31f0d1be3d72986aab26.patch +Patch0: %{pecl_name}-upstream.patch BuildRequires: %{?dtsprefix}gcc BuildRequires: %{?scl_prefix}php-devel > 7 @@ -63,7 +63,7 @@ Provides: %{?scl_prefix}php-pecl-apcu = %{version}-%{release} Provides: %{?scl_prefix}php-pecl-apcu%{?_isa} = %{version}-%{release} %endif -%if "%{?vendor}" == "Remi Collet" && 0%{!?scl:1} && 0%{?rhel} +%if "%{?packager}" == "Remi Collet" && 0%{!?scl:1} && 0%{?rhel} # Other third party repo stuff Obsoletes: php53-pecl-%{pecl_name} <= %{version} Obsoletes: php53u-pecl-%{pecl_name} <= %{version} @@ -325,6 +325,10 @@ fi %changelog +* Wed Aug 5 2020 Remi Collet <remi@remirepo.net> - 5.1.18-3 +- rebuild for 8.0.0beta1 +- more upstream patches + * Fri Apr 10 2020 Remi Collet <remi@remirepo.net> - 5.1.18-2 - add upstream patch for 8.0 |