php-src/Zend/tests/arg_unpack
Nikita Popov d3b484df82 Disallow use of positional args after unpacking
This commit disallows the use of trailing positional arguments
after argument unpacking was used. The following calls are no
longer valid:

    fn(...$array, $var);
    fn(...$array1, $var, ...$array2);

However, all of the following continue to be valid:

    fn($var, ...$array);
    fn(...$array1, ...$array2);
    fn($var, ...$array1, ...$array2);

The reason behind this change is a stack allocation issue pointed
out by Dmitry: As of PHP 5.5 the stack necessary for pushing
arguments is precomputed and preallocated, as such the individual
SEND opcodes no longer verify that there is enough stack space.
The unpacked arguments will occupy some of that preallocated
space and as such following positional arguments could write past
a stack page boundary.

An alternative resolution for this issue is to ensure that there
is enough space for the remaining arguments in the UNPACK opcode.
However making this allocation precise (rather than using a
conversative over-estimate) would require some effort. Given that
this particular aspect of the feature wasn't very popular in the
first place, it doesn't seem worth the effort.
2014-02-26 16:40:25 +01:00
..
basic.phpt Disallow use of positional args after unpacking 2014-02-26 16:40:25 +01:00
by_ref.phpt Disallow use of positional args after unpacking 2014-02-26 16:40:25 +01:00
dynamic.phpt Disallow use of positional args after unpacking 2014-02-26 16:40:25 +01:00
internal.phpt
invalid_type.phpt Disallow use of positional args after unpacking 2014-02-26 16:40:25 +01:00
many_args.phpt Fix argument unpacking across stack pages 2014-01-18 14:41:33 +01:00
method.phpt Disallow use of positional args after unpacking 2014-02-26 16:40:25 +01:00
new.phpt Disallow use of positional args after unpacking 2014-02-26 16:40:25 +01:00
positional_arg_after_unpack_error.phpt Disallow use of positional args after unpacking 2014-02-26 16:40:25 +01:00
string_keys.phpt
traversable_throwing_exception.phpt Disallow use of positional args after unpacking 2014-02-26 16:40:25 +01:00
traversable_with_by_ref_parameters.phpt Disallow use of positional args after unpacking 2014-02-26 16:40:25 +01:00