f5d76e7
From cb2fda94b02c5b7e8d16582410034f5a3dae526f Mon Sep 17 00:00:00 2001
f5d76e7
From: Tony Cook <tony@develop-help.com>
f5d76e7
Date: Tue, 25 Jul 2017 16:21:22 +1000
f5d76e7
Subject: [PATCH] (perl #131588) be a little more careful in arybase::_tie_it()
f5d76e7
MIME-Version: 1.0
f5d76e7
Content-Type: text/plain; charset=UTF-8
f5d76e7
Content-Transfer-Encoding: 8bit
f5d76e7
f5d76e7
Original patch by John Leitch <john@autosectools.com>
f5d76e7
Petr Pisar: Ported to 5.26.0.
f5d76e7
f5d76e7
Signed-off-by: Petr Písař <ppisar@redhat.com>
f5d76e7
---
f5d76e7
 ext/arybase/arybase.xs  | 10 ++++++----
f5d76e7
 ext/arybase/t/arybase.t |  4 +++-
f5d76e7
 2 files changed, 9 insertions(+), 5 deletions(-)
f5d76e7
f5d76e7
diff --git a/ext/arybase/arybase.xs b/ext/arybase/arybase.xs
f5d76e7
index 880bbe3..216442a 100644
f5d76e7
--- a/ext/arybase/arybase.xs
f5d76e7
+++ b/ext/arybase/arybase.xs
70d9301
@@ -428,10 +428,12 @@ _tie_it(SV *sv)
f5d76e7
     INIT:
f5d76e7
 	GV * const gv = (GV *)sv;
f5d76e7
     CODE:
f5d76e7
-	if (GvSV(gv))
f5d76e7
-	    /* This is *our* scalar now!  */
f5d76e7
-	    sv_unmagic(GvSV(gv), PERL_MAGIC_sv);
f5d76e7
-	tie(aTHX_ GvSVn(gv), NULL, GvSTASH(CvGV(cv)));
f5d76e7
+	if (isGV(gv)) {
f5d76e7
+	    if (GvSV(gv))
f5d76e7
+	        /* This is *our* scalar now!  */
f5d76e7
+	        sv_unmagic(GvSV(gv), PERL_MAGIC_sv);
f5d76e7
+	    tie(aTHX_ GvSVn(gv), NULL, GvSTASH(CvGV(cv)));
f5d76e7
+	}
f5d76e7
 
f5d76e7
 void
f5d76e7
 FETCH(...)
f5d76e7
diff --git a/ext/arybase/t/arybase.t b/ext/arybase/t/arybase.t
f5d76e7
index f3d3287..41e90df 100644
f5d76e7
--- a/ext/arybase/t/arybase.t
f5d76e7
+++ b/ext/arybase/t/arybase.t
f5d76e7
@@ -4,7 +4,7 @@
f5d76e7
 # plus miscellaneous bug fix tests
f5d76e7
 
f5d76e7
 no warnings 'deprecated';
f5d76e7
-use Test::More tests => 7;
f5d76e7
+use Test::More tests => 8;
f5d76e7
 
f5d76e7
 sub outside_base_scope { return "${'['}" }
f5d76e7
 
f5d76e7
@@ -34,4 +34,6 @@ is $@, "That use of \$[ is unsupported at $f line $l.\n",
f5d76e7
 
f5d76e7
 sub foo { my $x; $x = wait } # compilation of this routine used to crash
f5d76e7
 
f5d76e7
+ok eval { arybase::_tie_it(1); 1 }, "don't crash on bad call to _tie_it()";
f5d76e7
+
f5d76e7
 1;
f5d76e7
-- 
f5d76e7
2.9.4
f5d76e7