summaryrefslogtreecommitdiff
path: root/Zend/tests/arg_unpack
Commit message (Collapse)AuthorAgeFilesLines
* Disallow use of positional args after unpackingNikita Popov2014-02-269-105/+87
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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.
* Fix argument unpacking across stack pagesNikita Popov2014-01-181-0/+15
| | | | | | | | | If multiple unpacks were used (or mixed with normal arguments) parts of the arguments could land on different stack pages. If this occurs the arguments will now be copied to a new stack page. The code used to do this is copied verbatim from the PHP 5.4 branch and only modified to reduce the amount of inlined code.
* Implement argument unpackingNikita Popov2014-01-1110-0/+573
RFC: https://wiki.php.net/rfc/argument_unpacking