]> git.vpit.fr Git - perl/modules/Variable-Magic.git/commit
Execute magic callbacks into separate stacks rt107294
authorVincent Pit <vince@profvince.com>
Thu, 1 Oct 2015 13:09:17 +0000 (10:09 -0300)
committerVincent Pit <vince@profvince.com>
Thu, 1 Oct 2015 13:46:58 +0000 (10:46 -0300)
commitd9d2fa9ce2900e97a1f4756bf51a0b6c9bd56c18
tree36d1e952763eb893afe2232071da31d7081641a5
parent670e590caf3db942b5e7feddc1e86669f9f46294
Execute magic callbacks into separate stacks

When magic triggered, stack corruption could occur since the magic callback
arguments were passed on the same stack as the ambient one. This issue has
long gone unnoticed because most ops first unpack their stack arguments
before processing magic, but also because this module is mostly used in
practice to capture magic outside of the usual program op structure were
the argument stack is relevant.

This was made visible with core change 6442877a (publicized in perl 5.22.0)
which caused get magic on transliterations to happen on the same C argument
list as a PUSHmortal. This resulted in an undefined behaviour which was
usually resolved by the magic being processed first (for example by gcc),
but cl.exe on win32 prefers to execute the PUSHmortal first, hence the
stack was corrupted.

This fixes RT #107294.
Magic.xs