Commit Graph
554 Commits
Author SHA1 Message Date
Nikita Popov 4838e9799f Merge branch 'PHP-7.2' 2018-03-05 15:33:34 +01:00
Nikita Popov 634a1ff033 Merge branch 'PHP-7.1' into PHP-7.2 2018-03-05 15:32:39 +01:00
Nikita Popov fd5bd37ab1 Revert "Fixed bug #75961 (Strange references behavior)"
This reverts commit 94e9d0a2ae.

This code needs to be mindful about modifications to the array
happening during callback execution. It was written in a way that
only accessed the reference, which is guaranteed not to move. The
changed implementation instead accesses the array slot, leading to
use-after-free.

Run ext/standard/tests/array/bug61967.phpt under valgrind to see
the issue.
2018-03-05 15:32:21 +01:00
Gabriel Caruso ded3d984c6 Use EXPECT instead of EXPECTF when possible
EXPECTF logic in run-tests.php is considerable, so let's avoid it.
2018-02-20 21:53:48 +01:00
Xinchen Hui 55ef99e3b8 Merge branch 'PHP-7.2'
* PHP-7.2:
  Update NEWS
  Fixed bug #75961 (Strange references behavior)

Conflicts:
	ext/standard/array.c
2018-02-17 16:39:31 +08:00
Xinchen Hui 26dda8999c Merge branch 'PHP-7.1' into PHP-7.2
* PHP-7.1:
  Fixed bug #75961 (Strange references behavior)
2018-02-17 16:33:39 +08:00
Xinchen Hui 94e9d0a2ae Fixed bug #75961 (Strange references behavior) 2018-02-17 16:33:15 +08:00
Gabriel Caruso 21e3b0c70c Remove trailing whitespace in inc files 2018-02-10 19:20:23 +01:00
Gabriel Caruso 2d48d734a2 Fix some misspellings 2018-02-06 16:59:00 +01:00
Gabriel Caruso fef879a2d6 Use bool instead of boolean while throwing a type error
PHP requires boolean typehints to be written "bool" and disallows
"boolean" as an alias. This changes the error messages to match
the actual type name and avoids confusing messages like "must be
of type boolean, boolean given".

This a followup to ce1d69a1f6, which
implements the same change for integer->int.
2018-02-04 23:09:40 +01:00
Gabriel Caruso ce1d69a1f6 Use int instead of integer in type errors
PHP requires integer typehints to be written "int" and does not
allow "integer" as an alias. This changes type error messages to
match the actual type name and avoids confusing messages like
"must be of the type integer, integer given".
2018-02-04 19:08:23 +01:00
Gabriel Caruso 84488d921b Remove superfluous SKIPIF sections in more tests 2018-02-04 16:57:08 +01:00
Gabriel Caruso 53dbc69a8d Use %d when expecting line number in tests 2018-02-02 22:35:13 +01:00
Nikita Popov 5c983ae852 Merge branch 'PHP-7.2' 2018-01-12 18:34:34 +01:00
Nikita Popov 8c73fc8027 Fixed bug #75653 2018-01-12 18:30:22 +01:00
Sara Golemon 352b406650 Merge branch 'PHP-7.2'
* PHP-7.2:
  Don't optimize input arrays with suffix holes
2017-10-27 13:07:50 -04:00
Sara Golemon cc96166f74 Don't optimize input arrays with suffix holes 2017-10-27 13:07:33 -04:00
Dmitry Stogov cb9d81ef4f Refactored recursion pretection 2017-10-06 01:34:50 +03:00
tbpgr ba83338cbe Fix typo retuns to returns 2017-08-25 01:30:14 +09:00
Nikita Popov 6c2c7a023d Optimize array_unique()
In SORT_STRING mode, instead of sorting the array, build a hash of
seen elements.
2017-08-01 18:08:38 +02:00
Tom Van Looy 04fb3f28ff Remove superfluous semicolons 2017-06-26 00:23:25 +02:00
Sara Golemon 81064cd045 Merge branch 'PHP-7.1'
* PHP-7.1:
  Remove typo from test header
2017-05-10 16:50:47 -07:00
Sara Golemon 90bd4be3f9 Merge branch 'PHP-7.0' into PHP-7.1
* PHP-7.0:
  Remove typo from test header
2017-05-10 16:50:37 -07:00
Sara Golemon b8e0351978 Remove typo from test header 2017-05-10 16:50:19 -07:00
Nikita Popov 51b06aa86e Merge branch 'PHP-7.1' 2017-04-02 13:20:14 +02:00
Nikita Popov c8034514ed Fixed bug #74361 2017-04-02 13:19:32 +02:00
Rowan Collins 1b565f1393 Change 'undefined constant' from E_NOTICE to E_WARNING and mention deprecation
Implements RFC "Deprecate and Remove Bareword (Unquoted) Strings"
[https://wiki.php.net/rfc/deprecate-bareword-strings]
2017-03-23 18:52:43 +01:00
Sara Golemon c74bc87c74 Minor optimizations to array_keys()/array_values()
array_values():
When the input is an empty array or a packed array with no gaps,
return the original array.

array_keys():
When the input is an empty array, return the original array.
When the input is a packed array with no holes
(and no search key specified), populate the return with
a simple range(0, count($input) - 1)
2017-03-14 11:23:02 -07:00
Nikita Popov 06a0340162 Deprecate each() 2017-02-03 21:02:52 +01:00
Nikita Popov eaeecc523b Deprecate create_function() 2017-02-03 18:52:57 +01:00
Nikita Popov a8d901a80c Remove zend_version() checks from tests 2017-01-30 22:50:25 +01:00
Nikita Popov 79d918b3a6 Add test for buf #65251 2017-01-08 12:01:18 +01:00
Nikita Popov 5af586bec5 Remove more PHP 6 leftovers from tests 2016-11-24 22:39:39 +01:00
Pedro Magalhães 9c5af4e4cb Remove the b prefix from literals on unrelated tests 2016-11-20 21:11:53 +01:00
Craig Duncan c1001d22d2 Add expectations for invalid count() warnings 2016-11-17 09:33:04 +00:00
Craig Duncan b000f5c341 Add tests for invalid count() operations 2016-11-17 09:33:04 +00:00
Andrea Faulds a0502b89a6 Convert numeric keys in object/array casts
RFC: https://wiki.php.net/rfc/convert_numeric_keys_in_object_array_casts

This converts key types as appropriate in object to array and array to object
casts, as well as in get_object_vars().
2016-11-14 18:20:45 +00:00
Nikita Popov 736633310c Merge branch 'PHP-7.0' into PHP-7.1 2016-10-20 13:26:34 +02:00
Adam Saponara 55d17662cb Fix bug #71241: array_replace_recursive mutates ref params
`array_replace_recursive` can sometimes mutate its params if
references are nested within. This differs from the PHP 5 behavior.
2016-10-20 13:22:04 +02:00
Márcio Almada cba560e67f add extra test to protected behavior of compact and array string key order 2016-09-01 13:01:42 +02:00
Márcio Almada 00c2c3a476 fix unintentional bc break with compact('this') behavior 2016-09-01 13:01:38 +02:00
Nikita Popov 11e050920d Fix memory unsafety in array_walk()
Fixes bugs #61967, #62607, #69068, #70713.

The primary changes are:
a) Use the ht_iterator mechanism to ensure safety not only if the
   iterated array itself changes, but also if it is replaced (and
   potentially destroyed) entirely. We use the same semantics for
   behavior under modification as foreach-by-reference. In
   particular, we advance to the next element before processing it.
   If the iterated entity is exchanged we iterate the new one from
   the start. If it is not an array/object we warn and abort.
b) Always create a reference to the current value. Previously the
   code kept the value as a non-reference and updated it to the
   reference value produced by the user callback. However this is
   unsafe, as the array may have been reallocated in the meantime,
   so the previous value pointer is no longer value.
c) Around a recursive walk, incref the reference containing the
   array. This ensures that the location where the currently
   iterated value is stored cannot be freed.

One problem I was not able to solve is that we cannot decrement
the apply count if the array is exchanged during a recursive walk.
2016-07-30 00:15:32 +02:00
Nikita Popov 261c436d8c Merge branch 'PHP-7.0' into PHP-7.1 2016-07-29 19:08:15 +02:00
Nikita Popov 8a442a33c3 Fix ref handling in array_merge/replace_recursive()
As usual, if the reference has rc=1 it really isn't a reference.
2016-07-29 19:07:04 +02:00
Xinchen Hui c35dab005c Merge branch 'PHP-7.0'
* PHP-7.0:
  Fixed bug #72622 (array_walk + array_replace_recursive create references from nothing)
2016-07-20 16:12:49 +08:00
Xinchen Hui 3c3b8c8365 Fixed bug #72622 (array_walk + array_replace_recursive create references from nothing) 2016-07-20 16:12:37 +08:00
Leigh 06607993f6 Improve array_rand distribution 2016-07-06 12:35:13 +01:00
Xinchen Hui eb65db0808 Use zend_sort in array_multisort (tests change is expected) 2016-06-23 20:58:45 +08:00
Dmitry Stogov ff363e2e7c Implemented RFC: Replace "Missing argument" warning with "Too few arguments" exception
Squashed commit of the following:

commit 8b45fa2acb8cd92542a39e1e4720fe1f4fabc26c
Author: Dmitry Stogov <dmitry@zend.com>
Date:   Thu Jun 16 01:52:50 2016 +0300

    Separate slow path of ZEND_RECV into a cold function.

commit 9e18895ee59c64c93a96b1ba3061355c4663e962
Author: Dmitry Stogov <dmitry@zend.com>
Date:   Wed Jun 15 23:26:28 2016 +0300

    Required argument can't be IS_UNDEF anymore.

commit 662db66e3943d4455c65e4f987bb54abf724ecb2
Author: Dmitry Stogov <dmitry@zend.com>
Date:   Tue May 31 17:14:50 2016 +0300

    Replace "Missing argument" warning by "Too few arguments" exception.
2016-06-16 02:32:02 +03:00
Dmitry Stogov bfcf32237e Fixed bug #72369 (array_merge() produces references in PHP7) 2016-06-09 15:07:44 +03:00