Skip to content

Commit ad47199

Browse files
committed
sv.h: Use STATIC_ASSERT_EXPR on some assigned-to *args
This makes sure that the argument whose pointer is being passed has the correct size to be settable by the called element.
1 parent 8eff2c5 commit ad47199

File tree

1 file changed

+30
-15
lines changed

1 file changed

+30
-15
lines changed

sv.h

Lines changed: 30 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1981,19 +1981,22 @@ END_EXTERN_C
19811981
(((SvFLAGS(sv) & (SVf_POK|SVs_GMG)) == SVf_POK) || ((SvFLAGS(sv) & (SVf_IOK|SVp_POK|SVs_GMG)) == (SVf_IOK|SVp_POK)))
19821982

19831983
#define SvPV_flags(sv, len, flags) \
1984+
(STATIC_ASSERT_EXPR_(sizeof(len) == sizeof(STRLEN)), \
19841985
Perl_SvPV_helper(aTHX_ sv, &len, flags, SvPVnormal_type_, \
1985-
Perl_sv_2pv_flags, FALSE, 0)
1986+
Perl_sv_2pv_flags, FALSE, 0))
19861987
#define SvPV_flags_const(sv, len, flags) \
1988+
(STATIC_ASSERT_EXPR_(sizeof(len) == sizeof(STRLEN)), \
19871989
((const char*) Perl_SvPV_helper(aTHX_ sv, &len, flags, SvPVnormal_type_, \
19881990
Perl_sv_2pv_flags, FALSE, \
1989-
SV_CONST_RETURN))
1991+
SV_CONST_RETURN)))
19901992
#define SvPV_flags_const_nolen(sv, flags) \
19911993
((const char*) Perl_SvPV_helper(aTHX_ sv, NULL, flags, SvPVnormal_type_, \
19921994
Perl_sv_2pv_flags, FALSE, \
19931995
SV_CONST_RETURN))
19941996
#define SvPV_flags_mutable(sv, len, flags) \
1997+
(STATIC_ASSERT_EXPR_(sizeof(len) == sizeof(STRLEN)), \
19951998
Perl_SvPV_helper(aTHX_ sv, &len, flags, SvPVnormal_type_, \
1996-
Perl_sv_2pv_flags, FALSE, SV_MUTABLE_RETURN)
1999+
Perl_sv_2pv_flags, FALSE, SV_MUTABLE_RETURN))
19972000

19982001
#define SvPV_nolen(sv) \
19992002
Perl_SvPV_helper(aTHX_ sv, NULL, SV_GMAGIC, SvPVnormal_type_, \
@@ -2013,14 +2016,16 @@ END_EXTERN_C
20132016
#define SvPV_nomg_const_nolen(sv) SvPV_flags_const_nolen(sv, 0)
20142017

20152018
#define SvPV_force_flags(sv, len, flags) \
2019+
(STATIC_ASSERT_EXPR_(sizeof(len) == sizeof(STRLEN)), \
20162020
Perl_SvPV_helper(aTHX_ sv, &len, flags, SvPVforce_type_, \
2017-
Perl_sv_pvn_force_flags, FALSE, 0)
2021+
Perl_sv_pvn_force_flags, FALSE, 0))
20182022
#define SvPV_force_flags_nolen(sv, flags) \
20192023
Perl_SvPV_helper(aTHX_ sv, NULL, flags, SvPVforce_type_, \
20202024
Perl_sv_pvn_force_flags, FALSE, 0)
20212025
#define SvPV_force_flags_mutable(sv, len, flags) \
2026+
(STATIC_ASSERT_EXPR_(sizeof(len) == sizeof(STRLEN)), \
20222027
Perl_SvPV_helper(aTHX_ sv, &len, flags, SvPVforce_type_, \
2023-
Perl_sv_pvn_force_flags, FALSE, SV_MUTABLE_RETURN)
2028+
Perl_sv_pvn_force_flags, FALSE, SV_MUTABLE_RETURN))
20242029

20252030
#define SvPV_force(sv, len) SvPV_force_flags(sv, len, SV_GMAGIC)
20262031
#define SvPV_force_nolen(sv) SvPV_force_flags_nolen(sv, SV_GMAGIC)
@@ -2031,44 +2036,54 @@ END_EXTERN_C
20312036
#define SvPV_force_nomg_nolen(sv) SvPV_force_flags_nolen(sv, 0)
20322037

20332038
#define SvPVutf8(sv, len) \
2039+
(STATIC_ASSERT_EXPR_(sizeof(len) == sizeof(STRLEN)), \
20342040
Perl_SvPV_helper(aTHX_ sv, &len, SV_GMAGIC, SvPVutf8_type_, \
2035-
Perl_sv_2pvutf8_flags, FALSE, 0)
2041+
Perl_sv_2pvutf8_flags, FALSE, 0))
20362042
#define SvPVutf8_nomg(sv, len) \
2043+
(STATIC_ASSERT_EXPR_(sizeof(len) == sizeof(STRLEN)), \
20372044
Perl_SvPV_helper(aTHX_ sv, &len, 0, SvPVutf8_type_, \
2038-
Perl_sv_2pvutf8_flags, FALSE, 0)
2045+
Perl_sv_2pvutf8_flags, FALSE, 0))
20392046
#define SvPVutf8_nolen(sv) \
20402047
Perl_SvPV_helper(aTHX_ sv, NULL, SV_GMAGIC, SvPVutf8_type_, \
20412048
Perl_sv_2pvutf8_flags, FALSE, 0)
20422049
#define SvPVutf8_or_null(sv, len) \
2050+
(STATIC_ASSERT_EXPR_(sizeof(len) == sizeof(STRLEN)), \
20432051
Perl_SvPV_helper(aTHX_ sv, &len, SV_GMAGIC, SvPVutf8_type_, \
2044-
Perl_sv_2pvutf8_flags, TRUE, 0)
2052+
Perl_sv_2pvutf8_flags, TRUE, 0))
20452053
#define SvPVutf8_or_null_nomg(sv, len) \
2054+
(STATIC_ASSERT_EXPR_(sizeof(len) == sizeof(STRLEN)), \
20462055
Perl_SvPV_helper(aTHX_ sv, &len, 0, SvPVutf8_type_, \
2047-
Perl_sv_2pvutf8_flags, TRUE, 0)
2056+
Perl_sv_2pvutf8_flags, TRUE, 0))
20482057

20492058
#define SvPVbyte(sv, len) \
2059+
(STATIC_ASSERT_EXPR_(sizeof(len) == sizeof(STRLEN)), \
20502060
Perl_SvPV_helper(aTHX_ sv, &len, SV_GMAGIC, SvPVbyte_type_, \
2051-
Perl_sv_2pvbyte_flags, FALSE, 0)
2061+
Perl_sv_2pvbyte_flags, FALSE, 0))
20522062
#define SvPVbyte_nomg(sv, len) \
2063+
(STATIC_ASSERT_EXPR_(sizeof(len) == sizeof(STRLEN)), \
20532064
Perl_SvPV_helper(aTHX_ sv, &len, 0, SvPVbyte_type_, \
2054-
Perl_sv_2pvbyte_flags, FALSE, 0)
2065+
Perl_sv_2pvbyte_flags, FALSE, 0))
20552066
#define SvPVbyte_nolen(sv) \
20562067
Perl_SvPV_helper(aTHX_ sv, NULL, SV_GMAGIC, SvPVbyte_type_, \
20572068
Perl_sv_2pvbyte_flags, FALSE, 0)
20582069
#define SvPVbyte_or_null(sv, len) \
2070+
(STATIC_ASSERT_EXPR_(sizeof(len) == sizeof(STRLEN)), \
20592071
Perl_SvPV_helper(aTHX_ sv, &len, SV_GMAGIC, SvPVbyte_type_, \
2060-
Perl_sv_2pvbyte_flags, TRUE, 0)
2072+
Perl_sv_2pvbyte_flags, TRUE, 0))
20612073
#define SvPVbyte_or_null_nomg(sv, len) \
2074+
(STATIC_ASSERT_EXPR_(sizeof(len) == sizeof(STRLEN)), \
20622075
Perl_SvPV_helper(aTHX_ sv, &len, 0, SvPVbyte_type_, \
2063-
Perl_sv_2pvbyte_flags, TRUE, 0)
2076+
Perl_sv_2pvbyte_flags, TRUE, 0))
20642077

20652078
#define SvPVutf8_force(sv, len) \
2079+
(STATIC_ASSERT_EXPR_(sizeof(len) == sizeof(STRLEN)), \
20662080
Perl_SvPV_helper(aTHX_ sv, &len, 0, SvPVutf8_pure_type_, \
2067-
Perl_sv_pvutf8n_force_wrapper, FALSE, 0)
2081+
Perl_sv_pvutf8n_force_wrapper, FALSE, 0))
20682082

20692083
#define SvPVbyte_force(sv, len) \
2084+
(STATIC_ASSERT_EXPR_(sizeof(len) == sizeof(STRLEN)), \
20702085
Perl_SvPV_helper(aTHX_ sv, &len, 0, SvPVbyte_pure_type_, \
2071-
Perl_sv_pvbyten_force_wrapper, FALSE, 0)
2086+
Perl_sv_pvbyten_force_wrapper, FALSE, 0))
20722087

20732088
/* define FOOx(): Before FOO(x) was inlined, these were idempotent versions of
20742089
* FOO(). */

0 commit comments

Comments
 (0)