From: Jürg Billeter Date: Sat, 10 Oct 2009 13:31:01 +0000 (+0200) Subject: Insert "%s" argument in printf calls with non-literal format string X-Git-Tag: 0.7.8~67 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=e4dea42ed513323115a36358cbcb14116416a8b7;p=thirdparty%2Fvala.git Insert "%s" argument in printf calls with non-literal format string --- diff --git a/vala/valamethodcall.vala b/vala/valamethodcall.vala index 7c31f6e32..25865c69b 100644 --- a/vala/valamethodcall.vala +++ b/vala/valamethodcall.vala @@ -271,6 +271,21 @@ public class Vala.MethodCall : Expression { if (last_arg != null) { // use last argument as format string format_literal = last_arg as StringLiteral; + if (format_literal == null && args.size == params.size - 1) { + // insert "%s" to avoid issues with embedded % + format_literal = new StringLiteral ("\"%s\""); + format_literal.target_type = analyzer.string_type.copy (); + argument_list.insert (args.size - 1, format_literal); + + // recreate iterator and skip to right position + arg_it = argument_list.iterator (); + foreach (FormalParameter param in params) { + if (param.ellipsis) { + break; + } + arg_it.next (); + } + } } else { // use instance as format string for string.printf (...) var ma = call as MemberAccess;