| 1 | diff -up perl-5.10.0/mg.c.crr perl-5.10.0/mg.c |
1 | diff -up perl-5.10.0/mg.c.BAD perl-5.10.0/mg.c |
| 2 | --- perl-5.10.0/mg.c.crr 2007-12-18 11:47:08.000000000 +0100 |
2 | --- perl-5.10.0/mg.c.BAD 2009-03-11 13:10:22.000000000 -0400 |
| 3 | +++ perl-5.10.0/mg.c 2008-05-26 15:28:17.000000000 +0200 |
3 | +++ perl-5.10.0/mg.c 2009-03-11 13:08:54.000000000 -0400 |
| 4 | @@ -1543,7 +1543,7 @@ Perl_magic_setisa(pTHX_ SV *sv, MAGIC *m |
4 | @@ -1543,10 +1543,11 @@ Perl_magic_setisa(pTHX_ SV *sv, MAGIC *m |
| 5 | stash = GvSTASH( |
5 | stash = GvSTASH( |
| 6 | SvTYPE(mg->mg_obj) == SVt_PVGV |
6 | SvTYPE(mg->mg_obj) == SVt_PVGV |
| 7 | ? (GV*)mg->mg_obj |
7 | ? (GV*)mg->mg_obj |
| 8 | - : (GV*)SvMAGIC(mg->mg_obj)->mg_obj |
8 | - : (GV*)SvMAGIC(mg->mg_obj)->mg_obj |
| 9 | + : (GV*)mg_find(mg->mg_obj, PERL_MAGIC_isa)->mg_obj |
9 | + : (GV*)mg_find(mg->mg_obj, PERL_MAGIC_isa)->mg_obj |
| 10 | ); |
10 | ); |
| 11 | |
11 | |
| 12 | mro_isa_changed_in(stash); |
12 | - 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"); |