don't use PerlHost's getenv after perl_destruct
authorDaniel Dragan <bulk88@hotmail.com>
Wed, 22 Aug 2012 06:19:55 +0000 (02:19 -0400)
committerTony Cook <tony@develop-help.com>
Fri, 24 Aug 2012 05:32:59 +0000 (15:32 +1000)
commit36e77d4126acf84c7d0007ed7c58e004ed3f3600
tree8a2a4bc412d644d5673eb88c5983cf2bfee91340
parent63adfed234ee0db21960b145d10fbfe3592c535f
don't use PerlHost's getenv after perl_destruct

On Win32, perl_free calls PerlHost's getenv which calls win32_getenv.
win32_getenv and its children use SVs and mortal stack. After
perl_destruct SVs and mortal stack don't exist but the old Itmps_stack
pointer remains unchanged/un-nulled. Depending on the memory allocator
randomness, previous mortaled SV would be written to allocator freed
but page allocated memory and it silently worked. Recently in 5.17 the
page started to be freed and now this bug segvs. This patch fixes
the problem by using PL_perl_destruct_level and calling getenv earlier.
perl.c