Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
when (re)creating @_, zero its elements
When a sub's @_ gets abandoned (e.g. when 'goto &bar' "donates" the current @_ to the new sub), a new AV is created at pad[0] for the old sub. Perl alloc()'s the AvARRAY() buffer for the new AV, but didn't zero it. This didn't used to be a problem, because @_ AVs are created !AvREAL(), so the first thing perl did when someone tries to modify @_, is to call av_reify() on it. And it just so happens that av_reify() zeros out all the unused slots on the array first. So code like $_[1] = 1; do_something_with($_[0]) was fine. However, on PERL_RC_STACK builds, @_ is AvREAL() by default now, so av_reify() doesn't get called, so AvARRAY() can sometimes contain random wild pointers. The fix is simple: zero AvARRAY() when creating it. This was showing as a failure in Test::Trap
- Loading branch information