From: Rico Tzschichholz Date: Sat, 6 Nov 2021 17:55:38 +0000 (+0100) Subject: vala: Check accessibility of initializer for constant and enum value X-Git-Tag: 0.55.1~46 X-Git-Url: http://git.ipfire.org/gitweb/gitweb.cgi?a=commitdiff_plain;h=9f1fa33b52d7c324521ce2d1808b5397182a3322;p=thirdparty%2Fvala.git vala: Check accessibility of initializer for constant and enum value --- diff --git a/tests/Makefile.am b/tests/Makefile.am index 190628152..329fb8795 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -1029,6 +1029,7 @@ TESTS = \ semantic/constant-reassignment-member.test \ semantic/constant-type-less-accessible.test \ semantic/constant-value.test \ + semantic/constant-value-less-accessible.test \ semantic/constant-value-missing.test \ semantic/constant-value-type.test \ semantic/constant-void.test \ @@ -1047,6 +1048,7 @@ TESTS = \ semantic/delete-unsupported.test \ semantic/element-access-index-invalid.test \ semantic/enum-empty.test \ + semantic/enum-value-less-accessible.test \ semantic/errordomain-empty.test \ semantic/field-accessibility.test \ semantic/field-compact-static.test \ diff --git a/tests/semantic/constant-value-less-accessible.test b/tests/semantic/constant-value-less-accessible.test new file mode 100644 index 000000000..ea909d6cf --- /dev/null +++ b/tests/semantic/constant-value-less-accessible.test @@ -0,0 +1,8 @@ +Invalid Code + +const int BAR = 42; + +public const int FOO = BAR; + +void main () { +} diff --git a/tests/semantic/enum-value-less-accessible.test b/tests/semantic/enum-value-less-accessible.test new file mode 100644 index 000000000..bbe131bce --- /dev/null +++ b/tests/semantic/enum-value-less-accessible.test @@ -0,0 +1,10 @@ +Invalid Code + +const int BAR = 42; + +public enum Foo { + FOO = BAR +} + +void main () { +} diff --git a/vala/valaconstant.vala b/vala/valaconstant.vala index 92591026c..c9b1bfbfd 100644 --- a/vala/valaconstant.vala +++ b/vala/valaconstant.vala @@ -168,6 +168,12 @@ public class Vala.Constant : Symbol { Report.error (value.source_reference, "Value must be constant"); return false; } + + // check whether initializer is at least as accessible as the constant + if (!value.is_accessible (this)) { + error = true; + Report.error (value.source_reference, "value is less accessible than constant `%s'", get_full_name ()); + } } } else { if (value != null) { diff --git a/vala/valaenumvalue.vala b/vala/valaenumvalue.vala index 7a98afb67..be3fcc52e 100644 --- a/vala/valaenumvalue.vala +++ b/vala/valaenumvalue.vala @@ -73,6 +73,12 @@ public class Vala.EnumValue : Constant { if (value != null) { value.check (context); + + // check whether initializer is at least as accessible as the enum value + if (!value.is_accessible (this)) { + error = true; + Report.error (value.source_reference, "value is less accessible than enum `%s'", parent_symbol.get_full_name ()); + } } return !error;