From c75ab21a94d99a03945b25b8b1543b7a345f7e80 Mon Sep 17 00:00:00 2001 From: Robin Houston Date: Tue, 22 Nov 2005 14:07:27 +0000 Subject: Re: [PATCH] concat interacts badly with magic Message-ID: <20051122140727.GA29861@rpc142.cs.man.ac.uk> (new version of patch for bug #37722) p4raw-id: //depot/perl@26192 --- pp_hot.c | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) (limited to 'pp_hot.c') diff --git a/pp_hot.c b/pp_hot.c index 813b606b0b..312eef7854 100644 --- a/pp_hot.c +++ b/pp_hot.c @@ -148,11 +148,14 @@ PP(pp_concat) dPOPTOPssrl; bool lbyte; STRLEN rlen; - const char *rpv = SvPV_const(right, rlen); /* mg_get(right) happens here */ - const bool rbyte = !DO_UTF8(right); + const char *rpv; + bool rbyte; bool rcopied = FALSE; if (TARG == right && right != left) { + /* mg_get(right) may happen here ... */ + rpv = SvPV_const(right, rlen); + rbyte = !DO_UTF8(right); right = sv_2mortal(newSVpvn(rpv, rlen)); rpv = SvPV_const(right, rlen); /* no point setting UTF-8 here */ rcopied = TRUE; @@ -171,14 +174,22 @@ PP(pp_concat) else { /* TARG == left */ STRLEN llen; SvGETMAGIC(left); /* or mg_get(left) may happen here */ - if (!SvOK(TARG)) + if (!SvOK(TARG)) { + if (left == right && ckWARN(WARN_UNINITIALIZED)) + report_uninit(right); sv_setpvn(left, "", 0); + } (void)SvPV_nomg_const(left, llen); /* Needed to set UTF8 flag */ lbyte = !DO_UTF8(left); if (IN_BYTES) SvUTF8_off(TARG); } + /* or mg_get(right) may happen here */ + if (!rcopied) { + rpv = SvPV_const(right, rlen); + rbyte = !DO_UTF8(right); + } if (lbyte != rbyte) { if (lbyte) sv_utf8_upgrade_nomg(TARG); -- cgit v1.2.1