From ca8d92cfddc9cc3d4904712f7e0dfc3b2598561d Mon Sep 17 00:00:00 2001 From: "Paul \"LeoNerd\" Evans" Date: Thu, 9 Feb 2023 14:45:20 +0000 Subject: Disallow bless hackery around classes and instances --- sv.c | 5 +++++ 1 file changed, 5 insertions(+) (limited to 'sv.c') diff --git a/sv.c b/sv.c index 8f11e9778f..800377ba0e 100644 --- a/sv.c +++ b/sv.c @@ -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); } -- cgit v1.2.1