From: Rico Tzschichholz Date: Wed, 15 Apr 2020 19:17:33 +0000 (+0200) Subject: vala: Check assigned handler of dynamic signal before proceeding further X-Git-Tag: 0.49.1~173 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=59bf720da38793b99ddf18c45b26c192840f29aa;p=thirdparty%2Fvala.git vala: Check assigned handler of dynamic signal before proceeding further This fixes criticals if an errornous expression was given. --- diff --git a/tests/Makefile.am b/tests/Makefile.am index 09f91d3b4..752e9b8fb 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -416,6 +416,7 @@ TESTS = \ objects/signals-enum-marshal.vala \ objects/signals-delegate.vala \ objects/signals-delegate-parameter.vala \ + objects/signals-dymanic-invalid-handler.test \ objects/signals-fundamental-return.vala \ objects/signals-gobject-return.vala \ objects/signals-lambda-delegate.vala \ diff --git a/tests/objects/signals-dymanic-invalid-handler.test b/tests/objects/signals-dymanic-invalid-handler.test new file mode 100644 index 000000000..ce1e86cf1 --- /dev/null +++ b/tests/objects/signals-dymanic-invalid-handler.test @@ -0,0 +1,6 @@ +Invalid Code + +void main () { + dynamic Object? foo = null; + foo.on_bar.connect (non_existent); +} diff --git a/vala/valamemberaccess.vala b/vala/valamemberaccess.vala index b8d5d1252..2c0355e1d 100644 --- a/vala/valamemberaccess.vala +++ b/vala/valamemberaccess.vala @@ -436,6 +436,11 @@ public class Vala.MemberAccess : Expression { // the first argument is the handler if (mcall.get_argument_list().size > 0) { s.handler = mcall.get_argument_list()[0]; + unowned MemberAccess? arg = s.handler as MemberAccess; + if (arg == null || !arg.check (context) || !(arg.symbol_reference is Method)) { + error = true; + Report.error (s.handler.source_reference, "Invalid handler for `%s'".printf (s.get_full_name ())); + } } s.access = SymbolAccessibility.PUBLIC; dynamic_object_type.type_symbol.scope.add (null, s);