cvs commit: ponie/src/pmc perl5cargo_cult.pmc
[email protected] (Nicholas Clark) 4 Nov 2004 12:35:32 -0000
| Newsgroups | perl.ponie.changes |
|---|---|
| Message-ID | <[email protected]> |
cvsuser 04/11/04 04:35:32
Modified: perl embed.fnc embed.h global.sym proto.h sv.c sv.h
src/pmc perl5cargo_cult.pmc
Log:
SvFLAGS() outside sv.c is now read only, calling into the PMC to get a value.
Inside sv.c it uses a static function to get lvalue access to the flags.
This should hinder intruders who want to alter the flags without the PMC
being aware of it. (A fair proportion of sv.c needing to move inside the PMC)
Revision Changes Path
1.33 +0 -1 ponie/perl/embed.fnc
Index: embed.fnc
===================================================================
RCS file: /cvs/public/ponie/perl/embed.fnc,v
retrieving revision 1.32
retrieving revision 1.33
diff -u -r1.32 -r1.33
--- embed.fnc 16 Oct 2004 10:27:59 -0000 1.32
+++ embed.fnc 4 Nov 2004 12:35:31 -0000 1.33
@@ -989,7 +989,6 @@
Ap |IV*|macro_AvOFF |AV *
Ap |void** |macro_SvANY |SV *
-Ap |U32* |macro_SvFLAGS |SV *
Ap |U32* |macro_SvREFCNT |SV *
Ap |char** |macro_SvPVX |SV *
Ap |STRLEN* |macro_SvCUR |SV *
1.23 +0 -2 ponie/perl/embed.h
Index: embed.h
===================================================================
RCS file: /cvs/public/ponie/perl/embed.h,v
retrieving revision 1.22
retrieving revision 1.23
diff -u -r1.22 -r1.23
--- embed.h 16 Oct 2004 10:27:59 -0000 1.22
+++ embed.h 4 Nov 2004 12:35:31 -0000 1.23
@@ -1270,7 +1270,6 @@
#define macro_AvMAX Perl_macro_AvMAX
#define macro_AvOFF Perl_macro_AvOFF
#define macro_SvANY Perl_macro_SvANY
-#define macro_SvFLAGS Perl_macro_SvFLAGS
#define macro_SvREFCNT Perl_macro_SvREFCNT
#define macro_SvPVX Perl_macro_SvPVX
#define macro_SvCUR Perl_macro_SvCUR
@@ -3827,7 +3826,6 @@
#define macro_AvMAX(a) Perl_macro_AvMAX(aTHX_ a)
#define macro_AvOFF(a) Perl_macro_AvOFF(aTHX_ a)
#define macro_SvANY(a) Perl_macro_SvANY(aTHX_ a)
-#define macro_SvFLAGS(a) Perl_macro_SvFLAGS(aTHX_ a)
#define macro_SvREFCNT(a) Perl_macro_SvREFCNT(aTHX_ a)
#define macro_SvPVX(a) Perl_macro_SvPVX(aTHX_ a)
#define macro_SvCUR(a) Perl_macro_SvCUR(aTHX_ a)
1.17 +0 -1 ponie/perl/global.sym
Index: global.sym
===================================================================
RCS file: /cvs/public/ponie/perl/global.sym,v
retrieving revision 1.16
retrieving revision 1.17
diff -u -r1.16 -r1.17
--- global.sym 16 Oct 2004 10:27:59 -0000 1.16
+++ global.sym 4 Nov 2004 12:35:31 -0000 1.17
@@ -650,7 +650,6 @@
Perl_macro_AvMAX
Perl_macro_AvOFF
Perl_macro_SvANY
-Perl_macro_SvFLAGS
Perl_macro_SvREFCNT
Perl_macro_SvPVX
Perl_macro_SvCUR
1.33 +0 -1 ponie/perl/proto.h
Index: proto.h
===================================================================
RCS file: /cvs/public/ponie/perl/proto.h,v
retrieving revision 1.32
retrieving revision 1.33
diff -u -r1.32 -r1.33
--- proto.h 16 Oct 2004 10:27:59 -0000 1.32
+++ proto.h 4 Nov 2004 12:35:31 -0000 1.33
@@ -947,7 +947,6 @@
PERL_CALLCONV IV* Perl_macro_AvOFF(pTHX_ AV *);
PERL_CALLCONV void** Perl_macro_SvANY(pTHX_ SV *);
-PERL_CALLCONV U32* Perl_macro_SvFLAGS(pTHX_ SV *);
PERL_CALLCONV U32* Perl_macro_SvREFCNT(pTHX_ SV *);
PERL_CALLCONV char** Perl_macro_SvPVX(pTHX_ SV *);
PERL_CALLCONV STRLEN* Perl_macro_SvCUR(pTHX_ SV *);
1.56 +1 -1 ponie/perl/sv.c
Index: sv.c
===================================================================
RCS file: /cvs/public/ponie/perl/sv.c,v
retrieving revision 1.55
retrieving revision 1.56
diff -u -r1.55 -r1.56
--- sv.c 4 Nov 2004 10:26:27 -0000 1.55
+++ sv.c 4 Nov 2004 12:35:31 -0000 1.56
@@ -1064,7 +1064,7 @@
->sv_any);
}
U32*
-Perl_macro_SvFLAGS (pTHX_ SV *sv) {
+S_macro_SvFLAGS_RW (pTHX_ SV *sv) {
return &(((struct STRUCT_SV*)Parrot_PMC_get_pointer(PL_Parrot,MUMBLE(sv)))
->sv_flags);
}
1.59 +3 -2 ponie/perl/sv.h
Index: sv.h
===================================================================
RCS file: /cvs/public/ponie/perl/sv.h,v
retrieving revision 1.58
retrieving revision 1.59
diff -u -r1.58 -r1.59
--- sv.h 4 Nov 2004 10:26:27 -0000 1.58
+++ sv.h 4 Nov 2004 12:35:31 -0000 1.59
@@ -139,10 +139,10 @@
#if defined(PERL_CORE) && defined(PERL_IN_SV_C)
/* sv.c will be replaced with PMC code to clone things etc, so little point
in re-working it to avoid all LVALUE accesses at this point. */
-# define SvFLAGS(sv) (*Perl_macro_SvFLAGS(aTHX_ (SV *) (sv)))
+# define SvFLAGS(sv) (*S_macro_SvFLAGS_RW(aTHX_ (SV *) (sv)))
#else
/* No longer an LVALUE */
-# define SvFLAGS(sv) (0 + *Perl_macro_SvFLAGS(aTHX_ (SV *) (sv)))
+# define SvFLAGS(sv) ((U32)Parrot_PMC_get_intval_intkey(PL_Parrot,MUMBLE(sv), Ponie_I_SV_FLAGS))
#endif
#define SvPMC(sv) 1
@@ -249,6 +249,7 @@
Ponie_I_SV_TYPE,
Ponie_I_SV_UPGRADE,
Ponie_I_SV_ZERO_FLAGS_SET_TYPE,
+ Ponie_I_SV_FLAGS, /* Read only */
Ponie_I_SVf_BREAK,
Ponie_I_SVp_OK,
Ponie_I_SVf_OK,
1.45 +3 -1 ponie/src/pmc/perl5cargo_cult.pmc
Index: perl5cargo_cult.pmc
===================================================================
RCS file: /cvs/public/ponie/src/pmc/perl5cargo_cult.pmc,v
retrieving revision 1.44
retrieving revision 1.45
diff -u -r1.44 -r1.45
--- perl5cargo_cult.pmc 4 Nov 2004 10:26:27 -0000 1.44
+++ perl5cargo_cult.pmc 4 Nov 2004 12:35:32 -0000 1.45
@@ -1,7 +1,7 @@
/* Perl5QQQ.pmc -*- c -*-
* Copyright: 2001-2004 The Perl Foundation. All Rights Reserved.
* CVS Info
- * $Id: perl5cargo_cult.pmc,v 1.44 2004/11/04 10:26:27 nicholas Exp $
+ * $Id: perl5cargo_cult.pmc,v 1.45 2004/11/04 12:35:32 nicholas Exp $
* Overview:
* These are the vtable functions for the Perl5QQQ base class
* Data Structure and Algorithms:
@@ -528,6 +528,8 @@
INTVAL get_integer_keyed_int(INTVAL key) {
switch (key) {
+ case Ponie_I_SV_FLAGS:
+ return ((struct STRUCT_SV *)PMC_struct_val(SELF))->sv_flags;
case Ponie_I_SV_TYPE:
return ((struct STRUCT_SV *)PMC_struct_val(SELF))->sv_flags
& SVTYPEMASK;