summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRico Tzschichholz <ricotz@ubuntu.com>2017-11-19 15:29:55 +0100
committerRico Tzschichholz <ricotz@ubuntu.com>2017-12-09 14:29:36 +0100
commitf2208a804ceee5b221c4ba20e0c30d9b2878a5c6 (patch)
tree9a3080a4853a85fb1be972cdb4f9d5a3bfd147f2
parent15b906bd1584f3bb8e3bfc76083e5b0f7708cc7e (diff)
downloadvala-f2208a804ceee5b221c4ba20e0c30d9b2878a5c6.tar.gz
codegen: Enforce name-length >= 3 for structs using GType
https://bugzilla.gnome.org/show_bug.cgi?id=764041
-rw-r--r--codegen/valaccodestructmodule.vala6
-rw-r--r--tests/Makefile.am1
-rw-r--r--tests/structs/bug764041.test10
3 files changed, 17 insertions, 0 deletions
diff --git a/codegen/valaccodestructmodule.vala b/codegen/valaccodestructmodule.vala
index eb52d472e..a68ffd39c 100644
--- a/codegen/valaccodestructmodule.vala
+++ b/codegen/valaccodestructmodule.vala
@@ -168,6 +168,12 @@ 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".printf (get_ccode_name (st)));
+ return;
+ }
+
var old_instance_finalize_context = instance_finalize_context;
instance_finalize_context = new EmitContext ();
diff --git a/tests/Makefile.am b/tests/Makefile.am
index d27c5949c..f85348115 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -129,6 +129,7 @@ TESTS = \
structs/bug690380.vala \
structs/bug694140.vala \
structs/bug749952.vala \
+ structs/bug764041.test \
structs/bug775761.vala \
delegates/casting.vala \
delegates/delegates.vala \
diff --git a/tests/structs/bug764041.test b/tests/structs/bug764041.test
new file mode 100644
index 000000000..1911cda0c
--- /dev/null
+++ b/tests/structs/bug764041.test
@@ -0,0 +1,10 @@
+Invalid Code
+
+struct N {
+ public int i;
+}
+
+void main() {
+ N n = { 42 };
+ Value v = n;
+}