From: Rico Tzschichholz Date: Wed, 6 Dec 2017 15:11:10 +0000 (+0100) Subject: vala: Don't transform an explicit "null" into a valid format-string X-Git-Tag: 0.38.4~14 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=58552767ce31f8a72db94945b6f2aed871de361f;p=thirdparty%2Fvala.git vala: Don't transform an explicit "null" into a valid format-string https://bugzilla.gnome.org/show_bug.cgi?id=791215 --- diff --git a/tests/Makefile.am b/tests/Makefile.am index 554a519ab..7232aa21e 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -97,6 +97,7 @@ TESTS = \ methods/bug774060.vala \ methods/bug775466.test \ methods/bug781061.vala \ + methods/bug791215.vala \ methods/generics.vala \ methods/printf-invalid.test \ methods/printf-constructor.vala \ diff --git a/tests/methods/bug791215.vala b/tests/methods/bug791215.vala new file mode 100644 index 000000000..b5e0c095d --- /dev/null +++ b/tests/methods/bug791215.vala @@ -0,0 +1,8 @@ +[PrintfFormat] +void foo_print (string? fmt, ...) { + assert (fmt == null); +} + +void main () { + foo_print (null); +} diff --git a/vala/valamethodcall.vala b/vala/valamethodcall.vala index 444395ac3..76f240382 100644 --- a/vala/valamethodcall.vala +++ b/vala/valamethodcall.vala @@ -412,7 +412,9 @@ public class Vala.MethodCall : Expression { // printf arguments if (mtype is MethodType && ((MethodType) mtype).method_symbol.printf_format) { StringLiteral format_literal = null; - if (last_arg != null) { + if (last_arg is NullLiteral) { + // do not replace explicit null + } else if (last_arg != null) { // use last argument as format string format_literal = StringLiteral.get_format_literal (last_arg); if (format_literal == null && args.size == params.size - 1) { diff --git a/vala/valaobjectcreationexpression.vala b/vala/valaobjectcreationexpression.vala index 4e5a9b958..e203a1a2b 100644 --- a/vala/valaobjectcreationexpression.vala +++ b/vala/valaobjectcreationexpression.vala @@ -385,7 +385,9 @@ public class Vala.ObjectCreationExpression : Expression { // printf arguments if (m.printf_format) { StringLiteral format_literal = null; - if (last_arg != null) { + if (last_arg is NullLiteral) { + // do not replace explicit null + } else if (last_arg != null) { // use last argument as format string format_literal = StringLiteral.get_format_literal (last_arg); if (format_literal == null && args.size == m.get_parameters ().size - 1) {