]> git.ipfire.org Git - thirdparty/vala.git/commitdiff
vala: Report invalid type in property assignment attempt
authorRico Tzschichholz <ricotz@ubuntu.com>
Mon, 15 Apr 2024 06:40:05 +0000 (08:40 +0200)
committerRico Tzschichholz <ricotz@ubuntu.com>
Mon, 15 Apr 2024 06:42:32 +0000 (08:42 +0200)
Fixes https://gitlab.gnome.org/GNOME/vala/issues/1541

tests/Makefile.am
tests/semantic/assignment-invalid-type-2.test [new file with mode: 0644]
vala/valaassignment.vala

index ddbcac3a4ffea4b6ac72ff23b8b8da42c2b9a6c2..32fa57abe08285a6699fe0ccde166317ba12d716 100644 (file)
@@ -1126,6 +1126,7 @@ TESTS = \
        semantic/assignment-signal-incompatible-method.test \
        semantic/assignment-signal-incompatible-type.test \
        semantic/assignment-invalid-type.test \
+       semantic/assignment-invalid-type-2.test \
        semantic/cast-gvalue-unsupported.test \
        semantic/cast-gvariant-unsupported.test \
        semantic/cast-void-not-allowed.test \
diff --git a/tests/semantic/assignment-invalid-type-2.test b/tests/semantic/assignment-invalid-type-2.test
new file mode 100644 (file)
index 0000000..ff9d0a8
--- /dev/null
@@ -0,0 +1,14 @@
+Invalid Code
+
+enum Foo {
+       MANAM;
+}
+
+class Bar : Object {
+       public Foo foo { get; set; }
+}
+
+void main () {
+       var bar = new Bar ();
+       bar.foo = Foo;
+}
index 0c5be5bf5929c4c550376152e45dc97fa74526a3..e9fb6054ab8dd3151c1fe52bcde9ee680acfca66 100644 (file)
@@ -323,6 +323,11 @@ public class Vala.Assignment : Expression {
                if (ma != null) {
                        if (ma.symbol_reference is Property) {
                                unowned Property prop = (Property) ma.symbol_reference;
+                               if (right.value_type == null) {
+                                       error = true;
+                                       Report.error (source_reference, "Assignment: Invalid assignment attempt");
+                                       return false;
+                               }
 
                                unowned DynamicProperty? dynamic_prop = prop as DynamicProperty;
                                if (dynamic_prop != null) {