]> git.ipfire.org Git - thirdparty/vala.git/commitdiff
vala: Ensure non-empty argument list for "disconnect" before accessing it 3f7b5187218dcf51a9ec182114fb104aef97289d 125/head
authorPrinceton Ferro <princetonferro@gmail.com>
Fri, 17 Apr 2020 06:45:12 +0000 (02:45 -0400)
committerRico Tzschichholz <ricotz@ubuntu.com>
Fri, 17 Apr 2020 07:18:13 +0000 (09:18 +0200)
Avoids an internal assertion on accessing an empty collection.

tests/Makefile.am
tests/semantic/signal-disconnect-empty-invalid.test [new file with mode: 0644]
vala/valamethodcall.vala

index 0593bef60a8860cd8ce1674c04e60da8ba7d09e4..3476db7b11f6c881dce7fc6435056da628f255e7 100644 (file)
@@ -900,6 +900,7 @@ TESTS = \
        semantic/signal-detail-invalid.test \
        semantic/signal-detail-non-string.test \
        semantic/struct-derived.test \
+       semantic/signal-disconnect-empty-invalid.test \
        semantic/signal-disconnect-invalid.test \
        semantic/signal-return-valist.test \
        semantic/struct-field-initializer.test \
diff --git a/tests/semantic/signal-disconnect-empty-invalid.test b/tests/semantic/signal-disconnect-empty-invalid.test
new file mode 100644 (file)
index 0000000..2830ed9
--- /dev/null
@@ -0,0 +1,10 @@
+Invalid Code
+
+class Foo : Object {
+       public signal void bar ();
+}
+
+void main () {
+       var foo = new Foo ();
+       foo.bar.disconnect ();
+}
index 98a7a878e9fade6465523e09d97435e374f333b5..3573113c4d2ec0646b086a7b6aad94799c4c20b5 100644 (file)
@@ -536,8 +536,7 @@ public class Vala.MethodCall : Expression {
 
                        unowned Signal? sig = m.parent_symbol as Signal;
                        if (sig != null && m.name == "disconnect") {
-                               var param = argument_list[0];
-                               if (param is LambdaExpression) {
+                               if (!argument_list.is_empty && argument_list[0] is LambdaExpression) {
                                        error = true;
                                        Report.error (source_reference, "Cannot disconnect lambda expression from signal");
                                        return false;