This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Fix crash when lex subs are used for overload
authorFather Chrysostomos <sprout@cpan.org>
Thu, 28 Aug 2014 13:40:29 +0000 (06:40 -0700)
committerFather Chrysostomos <sprout@cpan.org>
Thu, 28 Aug 2014 13:40:29 +0000 (06:40 -0700)
gv.c
t/op/lexsub.t

diff --git a/gv.c b/gv.c
index 7e3058d..e4d6aca 100644 (file)
--- a/gv.c
+++ b/gv.c
@@ -2553,7 +2553,7 @@ Perl_Gv_AMupdate(pTHX_ HV *stash, bool destructing)
           numifying instead of C's "+0". */
        gv = Perl_gv_fetchmeth_pvn(aTHX_ stash, cooky, l, -1, 0);
         cv = 0;
-        if (gv && (cv = GvCV(gv))) {
+        if (gv && (cv = GvCV(gv)) && CvGV(cv)) {
            if(GvNAMELEN(CvGV(cv)) == 3 && strEQ(GvNAME(CvGV(cv)), "nil")){
              const char * const hvname = HvNAME_get(GvSTASH(CvGV(cv)));
              if (hvname && HEK_LEN(HvNAME_HEK(GvSTASH(CvGV(cv)))) == 8
index 54bb985..774357b 100644 (file)
@@ -7,7 +7,7 @@ BEGIN {
     *bar::is = *is;
     *bar::like = *like;
 }
-plan 122;
+plan 124;
 
 # -------------------- Errors with feature disabled -------------------- #
 
@@ -322,6 +322,11 @@ like runperl(
   A::bar();
   is $stuff, 'A::bar', 'state sub assigned to *AUTOLOAD can autoload';
 }
+{
+  state sub quire{qr "quires"}
+  package o { use overload qr => \&quire }
+  ok "quires" =~ bless([], o::), 'state sub used as overload method';
+}
 
 # -------------------- my -------------------- #
 
@@ -624,6 +629,11 @@ like runperl(
   A::bar();
   is $stuff, 'A::bar', 'my sub assigned to *AUTOLOAD can autoload';
 }
+{
+  my sub quire{qr "quires"}
+  package mo { use overload qr => \&quire }
+  ok "quires" =~ bless([], mo::), 'my sub used as overload method';
+}
 
 # -------------------- Interactions (and misc tests) -------------------- #