From 085bde857c12ca3212eb9b96db84091274a8025c Mon Sep 17 00:00:00 2001 From: Nicholas Clark Date: Tue, 2 Jan 2007 21:10:13 +0000 Subject: Assignment to a tainted variable was causing confusion if the source value was an NV too large for an IV (bug #40708). Fix the confusion by not promoting private flags to public flags in S_save_magic if there are already public flags. p4raw-id: //depot/perl@29669 --- mg.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) (limited to 'mg.c') diff --git a/mg.c b/mg.c index a0877c5346..c5566dca77 100644 --- a/mg.c +++ b/mg.c @@ -100,7 +100,10 @@ S_save_magic(pTHX_ I32 mgs_ix, SV *sv) SvMAGICAL_off(sv); SvREADONLY_off(sv); - SvFLAGS(sv) |= (SvFLAGS(sv) & (SVp_IOK|SVp_NOK|SVp_POK)) >> PRIVSHIFT; + if (!(SvFLAGS(sv) & (SVf_IOK|SVf_NOK|SVf_POK))) { + /* No public flags are set, so promote any private flags to public. */ + SvFLAGS(sv) |= (SvFLAGS(sv) & (SVp_IOK|SVp_NOK|SVp_POK)) >> PRIVSHIFT; + } } /* -- cgit v1.2.1