From: Rico Tzschichholz Date: Sat, 6 Nov 2021 17:55:37 +0000 (+0100) Subject: vala: Add accessibility check of type for constants and structs base type X-Git-Tag: 0.55.1~83 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=a0d7177906d2576dbb5b432ac3a5189d580c108d;p=thirdparty%2Fvala.git vala: Add accessibility check of type for constants and structs base type --- diff --git a/tests/Makefile.am b/tests/Makefile.am index 3f4971e7a..eadf61b84 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -1012,6 +1012,7 @@ TESTS = \ semantic/constant-pointer.test \ semantic/constant-reassignment-element.test \ semantic/constant-reassignment-member.test \ + semantic/constant-type-less-accessible.test \ semantic/constant-value.test \ semantic/constant-value-missing.test \ semantic/constant-value-type.test \ @@ -1173,6 +1174,7 @@ TESTS = \ semantic/signal-disconnect-empty-invalid.test \ semantic/signal-disconnect-invalid.test \ semantic/signal-return-valist.test \ + semantic/struct-base-type-less-accessible.test \ semantic/struct-field-initializer.test \ semantic/struct-invalid-base.test \ semantic/struct-recursive.test \ diff --git a/tests/semantic/constant-type-less-accessible.test b/tests/semantic/constant-type-less-accessible.test new file mode 100644 index 000000000..16f51ec60 --- /dev/null +++ b/tests/semantic/constant-type-less-accessible.test @@ -0,0 +1,10 @@ +Invalid Code + +struct Bar { + public int i; +} + +public const Bar FOO = { 42 }; + +void main () { +} diff --git a/tests/semantic/struct-base-type-less-accessible.test b/tests/semantic/struct-base-type-less-accessible.test new file mode 100644 index 000000000..0989d5464 --- /dev/null +++ b/tests/semantic/struct-base-type-less-accessible.test @@ -0,0 +1,11 @@ +Invalid Code + +struct Bar { + public int i; +} + +public struct Foo : Bar { +} + +void main () { +} diff --git a/vala/valaconstant.vala b/vala/valaconstant.vala index fcbb4c321..5b30e7f38 100644 --- a/vala/valaconstant.vala +++ b/vala/valaconstant.vala @@ -121,6 +121,12 @@ public class Vala.Constant : Symbol { return false; } + // check whether constant type is at least as accessible as the constant + if (!context.analyzer.is_type_accessible (this, type_reference)) { + error = true; + Report.error (source_reference, "constant type `%s' is less accessible than constant `%s'", type_reference.to_string (), get_full_name ()); + } + if (!external) { if (value == null) { // constants from fast-vapi files are special diff --git a/vala/valastruct.vala b/vala/valastruct.vala index 4c4e28fdc..2ac7034af 100644 --- a/vala/valastruct.vala +++ b/vala/valastruct.vala @@ -510,6 +510,12 @@ public class Vala.Struct : TypeSymbol { Report.error (source_reference, "The base type `%s' of struct `%s' is not a struct", base_type.to_string (), get_full_name ()); return false; } + + // check whether base type is at least as accessible as the struct + if (!context.analyzer.is_type_accessible (this, base_type)) { + error = true; + Report.error (source_reference, "base type `%s' is less accessible than struct `%s'", base_type.to_string (), get_full_name ()); + } } foreach (TypeParameter p in type_parameters) {