diff options
author | Paul "LeoNerd" Evans <leonerd@leonerd.org.uk> | 2023-02-09 14:45:20 +0000 |
---|---|---|
committer | Paul "LeoNerd" Evans <leonerd@leonerd.org.uk> | 2023-02-10 12:07:02 +0000 |
commit | ca8d92cfddc9cc3d4904712f7e0dfc3b2598561d (patch) | |
tree | 7cd889ad35d1adc69805fd67c19d0c066af7f54d /sv.c | |
parent | 24c33697796a1556af3f58e15fc4fb6b0d1538dc (diff) | |
download | perl-ca8d92cfddc9cc3d4904712f7e0dfc3b2598561d.tar.gz |
Disallow bless hackery around classes and instances
Diffstat (limited to 'sv.c')
-rw-r--r-- | sv.c | 5 |
1 files changed, 5 insertions, 0 deletions
@@ -10772,10 +10772,15 @@ Perl_sv_bless(pTHX_ SV *const sv, HV *const stash) SvGETMAGIC(sv); if (!SvROK(sv)) Perl_croak(aTHX_ "Can't bless non-reference value"); + if (HvSTASH_IS_CLASS(stash)) + Perl_croak(aTHX_ "Attempt to bless into a class"); + tmpRef = SvRV(sv); if (SvFLAGS(tmpRef) & (SVs_OBJECT|SVf_READONLY|SVf_PROTECT)) { if (SvREADONLY(tmpRef)) Perl_croak_no_modify(); + if (SvTYPE(tmpRef) == SVt_PVOBJ) + Perl_croak(aTHX_ "Can't bless an object reference"); if (SvOBJECT(tmpRef)) { oldstash = SvSTASH(tmpRef); } |