Stop calling sv_usepvn_flags from sv_sethek
authorPeter Martini <PeterCMartini@GMail.com>
Sat, 3 Dec 2011 12:01:44 +0000 (07:01 -0500)
committerFather Chrysostomos <sprout@cpan.org>
Sat, 3 Dec 2011 17:26:43 +0000 (09:26 -0800)
commit58b643af94f2fff7b3765a746a475cb8183ccc4b
treecf84b536bb110541a31ed9b83636a1e787731f4c
parentdb12e2d38b3ae9d4035fb95151828de67a1429c1
Stop calling sv_usepvn_flags from sv_sethek

sv_usepvn_flags assumes that ptr is at the head of a block
of memory allocated by malloc.  If perl's malloc is in use,
the data structures malloc uses and the data allocated for
perl are intermixed, and accounting done by malloced_size
in sv_usepvn_flags will overwrite valid memory if its called
on an address that is not the start of a malloced block.

The actual work being accomplished by sv_usepvn_flags, and
not undone immediately after by sv_sethek, is limited to 3 calls
on the SV.  Inlining those calls removes the dependency on malloc.

This fixes perl #104034.
sv.c