]> git.ipfire.org Git - thirdparty/vala.git/commitdiff
vala: Ensure non-empty argument list for "disconnect" before accessing it
authorPrinceton Ferro <princetonferro@gmail.com>
Fri, 17 Apr 2020 06:45:12 +0000 (02:45 -0400)
committerRico Tzschichholz <ricotz@ubuntu.com>
Mon, 20 Apr 2020 20:03:58 +0000 (22:03 +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 1d1739fb9a3fba236bc31dd83290f90d6f830016..6925ebda3d9c04f0e71d8558f8dc617f1234afc3 100644 (file)
@@ -869,6 +869,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 baa451e207389b189d883278c9524ebf32919f05..f71eb957ca681f320b99d57879f26eeb34e2f335 100644 (file)
@@ -541,8 +541,7 @@ public class Vala.MethodCall : Expression {
 
                        unowned Signal? sig = m.parent_symbol as Signal;
                        if (sig != null && m.name == "disconnect") {
-                               var param = get_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;