From: Rico Tzschichholz Date: Wed, 17 Nov 2021 20:26:39 +0000 (+0100) Subject: codegen: Check required length of enum type name for GType support X-Git-Tag: 0.52.8~20 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=9d4f050ed21cfbf4c5d628bff573734a99c7c8ff;p=thirdparty%2Fvala.git codegen: Check required length of enum type name for GType support Add corresponding tests for types which have support for GType --- diff --git a/codegen/valaccodestructmodule.vala b/codegen/valaccodestructmodule.vala index 5042698cd..c82b79671 100644 --- a/codegen/valaccodestructmodule.vala +++ b/codegen/valaccodestructmodule.vala @@ -143,12 +143,6 @@ public abstract class Vala.CCodeStructModule : CCodeBaseModule { push_context (new EmitContext (st)); push_line (st.source_reference); - if (get_ccode_has_type_id (st) && get_ccode_name (st).length < 3) { - st.error = true; - Report.error (st.source_reference, "Name `%s' is too short for struct using GType", get_ccode_name (st)); - return; - } - var old_instance_finalize_context = instance_finalize_context; instance_finalize_context = new EmitContext (); diff --git a/codegen/valagtypemodule.vala b/codegen/valagtypemodule.vala index e97aeb1df..bb78d025a 100644 --- a/codegen/valagtypemodule.vala +++ b/codegen/valagtypemodule.vala @@ -2316,6 +2316,12 @@ public class Vala.GTypeModule : GErrorModule { } if (get_ccode_has_type_id (st)) { + if (get_ccode_name (st).length < 3) { + st.error = true; + Report.error (st.source_reference, "Struct name `%s' is too short", get_ccode_name (st)); + return; + } + push_line (st.source_reference); var type_fun = new StructRegisterFunction (st); type_fun.init_from_type (context, false, false); @@ -2328,6 +2334,12 @@ public class Vala.GTypeModule : GErrorModule { base.visit_enum (en); if (get_ccode_has_type_id (en)) { + if (get_ccode_name (en).length < 3) { + en.error = true; + Report.error (en.source_reference, "Enum name `%s' is too short", get_ccode_name (en)); + return; + } + push_line (en.source_reference); var type_fun = new EnumRegisterFunction (en); type_fun.init_from_type (context, false, false); diff --git a/tests/Makefile.am b/tests/Makefile.am index 1fb4e1d1a..cf7198fa4 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -324,6 +324,7 @@ TESTS = \ enums/default-gtype.vala \ enums/enum_only.vala \ enums/enum-no-gtype.vala \ + enums/enum-gtype-too-short.test \ enums/enums.vala \ enums/flags.vala \ enums/from-0-literal.vala \ @@ -343,6 +344,7 @@ TESTS = \ structs/struct-base-types.vala \ structs/struct-boxed-cast.vala \ structs/struct-empty-still.test \ + structs/struct-gtype-too-short.test \ structs/struct-initializer-list-in-array.vala \ structs/struct-initializer-list-nested.vala \ structs/struct-no-gtype.vala \ @@ -391,7 +393,6 @@ TESTS = \ structs/bug690380.vala \ structs/bug694140.vala \ structs/bug749952.vala \ - structs/bug764041.test \ structs/bug775761.vala \ structs/bug777194.vala \ structs/bug777194-2.vala \ @@ -441,6 +442,7 @@ TESTS = \ objects/class-ccode-cprefix.vala \ objects/class_only.vala \ objects/class-destroysinstance.vala \ + objects/class-gtype-too-short.test \ objects/class-inner-types.vala \ objects/class-new-no-override.vala \ objects/class-vfunc-base-access.vala \ @@ -472,6 +474,7 @@ TESTS = \ objects/interface_only.vala \ objects/interface-async-base-access.vala \ objects/interface-base-access.vala \ + objects/interface-gtype-too-short.test \ objects/interface-inner-types.vala \ objects/interfaces.vala \ objects/interface-abstract-async-override.vala \ diff --git a/tests/enums/enum-gtype-too-short.test b/tests/enums/enum-gtype-too-short.test new file mode 100644 index 000000000..b897ab50c --- /dev/null +++ b/tests/enums/enum-gtype-too-short.test @@ -0,0 +1,8 @@ +Invalid Code + +enum E { + FOO +} + +void main () { +} diff --git a/tests/objects/class-gtype-too-short.test b/tests/objects/class-gtype-too-short.test new file mode 100644 index 000000000..de346c0aa --- /dev/null +++ b/tests/objects/class-gtype-too-short.test @@ -0,0 +1,7 @@ +Invalid Code + +class C { +} + +void main () { +} diff --git a/tests/objects/interface-gtype-too-short.test b/tests/objects/interface-gtype-too-short.test new file mode 100644 index 000000000..6a13b8cf7 --- /dev/null +++ b/tests/objects/interface-gtype-too-short.test @@ -0,0 +1,7 @@ +Invalid Code + +interface I { +} + +void main () { +} diff --git a/tests/structs/bug764041.test b/tests/structs/bug764041.test deleted file mode 100644 index 1911cda0c..000000000 --- a/tests/structs/bug764041.test +++ /dev/null @@ -1,10 +0,0 @@ -Invalid Code - -struct N { - public int i; -} - -void main() { - N n = { 42 }; - Value v = n; -} diff --git a/tests/structs/struct-gtype-too-short.test b/tests/structs/struct-gtype-too-short.test new file mode 100644 index 000000000..a260d155e --- /dev/null +++ b/tests/structs/struct-gtype-too-short.test @@ -0,0 +1,8 @@ +Invalid Code + +struct S { + public int i; +} + +void main () { +}