| 1 |
spot |
1.2 |
diff -up perl-5.10.0/mg.c.BAD perl-5.10.0/mg.c
|
| 2 |
|
|
--- perl-5.10.0/mg.c.BAD 2009-03-11 13:10:22.000000000 -0400
|
| 3 |
|
|
+++ perl-5.10.0/mg.c 2009-03-11 13:08:54.000000000 -0400
|
| 4 |
|
|
@@ -1543,10 +1543,11 @@ Perl_magic_setisa(pTHX_ SV *sv, MAGIC *m
|
| 5 |
mmaslano |
1.1 |
stash = GvSTASH(
|
| 6 |
|
|
SvTYPE(mg->mg_obj) == SVt_PVGV
|
| 7 |
|
|
? (GV*)mg->mg_obj
|
| 8 |
|
|
- : (GV*)SvMAGIC(mg->mg_obj)->mg_obj
|
| 9 |
spot |
1.2 |
+ : (GV*)mg_find(mg->mg_obj, PERL_MAGIC_isa)->mg_obj
|
| 10 |
mmaslano |
1.1 |
);
|
| 11 |
|
|
|
| 12 |
spot |
1.2 |
- mro_isa_changed_in(stash);
|
| 13 |
|
|
+ if (stash)
|
| 14 |
|
|
+ mro_isa_changed_in(stash);
|
| 15 |
|
|
|
| 16 |
|
|
return 0;
|
| 17 |
|
|
}
|
| 18 |
|
|
--- a/t/mro/pkg_gen.t
|
| 19 |
|
|
+++ b/t/mro/pkg_gen.t
|
| 20 |
|
|
@@ -4,7 +4,7 @@ use strict;
|
| 21 |
|
|
use warnings;
|
| 22 |
|
|
|
| 23 |
|
|
chdir 't' if -d 't';
|
| 24 |
|
|
-require q(./test.pl); plan(tests => 6);
|
| 25 |
|
|
+require q(./test.pl); plan(tests => 7);
|
| 26 |
|
|
|
| 27 |
|
|
{
|
| 28 |
|
|
package Foo;
|
| 29 |
|
|
@@ -34,3 +34,7 @@ is(mro::get_pkg_gen('Foo'), 1, "pkg_gen 1 for undef %Pkg::");
|
| 30 |
|
|
|
| 31 |
|
|
delete $::{"Foo::"};
|
| 32 |
|
|
is(mro::get_pkg_gen('Foo'), 0, 'pkg_gen 0 for delete $::{Pkg::}');
|
| 33 |
|
|
+
|
| 34 |
|
|
+delete $::{"Quux::"};
|
| 35 |
|
|
+push @Quux::ISA, "Woot"; # should not segfault
|
| 36 |
|
|
+ok(1, "No segfault on modification of ISA in a deleted stash");
|