From: Xinchen Hui Date: Wed, 11 Nov 2015 04:31:45 +0000 (+0800) Subject: Re-Fixed bug #70249 (Segmentation fault while running PHPUnit tests on phpBB 3.2... X-Git-Tag: php-7.0.1RC1~109 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=82f503f5874a6d1d632ccf7c4b4ad3df20f9ba39;p=php Re-Fixed bug #70249 (Segmentation fault while running PHPUnit tests on phpBB 3.2-dev) Let's fixed this in the root instead --- diff --git a/NEWS b/NEWS index 6a88338f6e..53f4d405fb 100644 --- a/NEWS +++ b/NEWS @@ -2,6 +2,10 @@ PHP NEWS ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| ?? ??? 2015, PHP 7.0.1 +- Core: + . Fixed bug #70249 (Segmentation fault while running PHPUnit tests on + phpBB 3.2-dev). (Laruence) + - Streams/Socket . Add IPV6_V6ONLY constant / make it usable in stream contexts. (Bob) diff --git a/Zend/zend_hash.c b/Zend/zend_hash.c index 52868cf4a6..c324f1dfa8 100644 --- a/Zend/zend_hash.c +++ b/Zend/zend_hash.c @@ -1458,8 +1458,8 @@ ZEND_API void ZEND_FASTCALL zend_hash_apply(HashTable *ht, apply_func_t apply_fu HT_ASSERT(GC_REFCOUNT(ht) == 1); HASH_PROTECT_RECURSION(ht); - p = ht->arData; - for (idx = 0; idx < ht->nNumUsed; idx++, p++) { + for (idx = 0; idx < ht->nNumUsed; idx++) { + p = ht->arData + idx; if (UNEXPECTED(Z_TYPE(p->val) == IS_UNDEF)) continue; result = apply_func(&p->val); @@ -1484,8 +1484,8 @@ ZEND_API void ZEND_FASTCALL zend_hash_apply_with_argument(HashTable *ht, apply_f HT_ASSERT(GC_REFCOUNT(ht) == 1); HASH_PROTECT_RECURSION(ht); - p = ht->arData; - for (idx = 0; idx < ht->nNumUsed; idx++, p++) { + for (idx = 0; idx < ht->nNumUsed; idx++) { + p = ht->arData + idx; if (UNEXPECTED(Z_TYPE(p->val) == IS_UNDEF)) continue; result = apply_func(&p->val, argument); @@ -1513,8 +1513,8 @@ ZEND_API void ZEND_FASTCALL zend_hash_apply_with_arguments(HashTable *ht, apply_ HASH_PROTECT_RECURSION(ht); - p = ht->arData; - for (idx = 0; idx < ht->nNumUsed; idx++, p++) { + for (idx = 0; idx < ht->nNumUsed; idx++) { + p = ht->arData + idx; if (UNEXPECTED(Z_TYPE(p->val) == IS_UNDEF)) continue; va_start(args, num_args); hash_key.h = p->h; @@ -1547,10 +1547,9 @@ ZEND_API void ZEND_FASTCALL zend_hash_reverse_apply(HashTable *ht, apply_func_t HASH_PROTECT_RECURSION(ht); idx = ht->nNumUsed; - p = ht->arData + idx; while (idx > 0) { idx--; - p--; + p = ht->arData + idx; if (UNEXPECTED(Z_TYPE(p->val) == IS_UNDEF)) continue; result = apply_func(&p->val); diff --git a/ext/standard/tests/general_functions/bug70249.phpt b/ext/standard/tests/general_functions/bug70249.phpt new file mode 100644 index 0000000000..743df83ba0 --- /dev/null +++ b/ext/standard/tests/general_functions/bug70249.phpt @@ -0,0 +1,28 @@ +--TEST-- +Bug #70249 (Segmentation fault while running PHPUnit tests on phpBB 3.2-dev) +--FILE-- +flush(); + // make sure log entries written by shutdown functions are also flushed + // ensure "flush()" is called last when there are multiple shutdown functions + register_shutdown_function([$this, 'flush'], true); + }); + } + + public function flush($final = false) { + return 1; + } +} + +for ($i = 0; $i < 200; $i++) { + $a = new Logger(); +} +?> +okey +--EXPECT-- +okey