From: "H.Yamamoto" Date: 2005-09-09T19:49:14+09:00 Subject: [ruby-dev:26997] Re: sprintf does not warn in verbose mode. 山本です。 >-wで例外を出すか出さないかが変化する(警告以外の挙動が変化す >る)のはよくないということで、-dで例外が発生するようにしまし >た。そのとき、1.9では-wで警告するようにしましたが、1.8ではど >うしようか迷ってそのままになっていました。警告が出た方が親切 >ですし、1.9で問題があったという話も聞かないので、1.8にもバッ >クポートすることにします。 Wed Sep 7 08:32:47 2005 Yukihiro Matsumoto * object.c (rb_mod_cvar_get, rb_mod_cvar_set): document fix from sheepman ; a bug in visibility description. [ruby-dev:26965] * sprintf.c (rb_f_sprintf): warn "too many argument" on verbose mode (-v/-w); backported from 1.9. [ruby-dev:26963] とあるのですが、sprintf.c のほうがコミットされてないようです。こうでしょうか? Index: sprintf.c =================================================================== RCS file: /src/ruby/sprintf.c,v retrieving revision 1.34.2.11 diff -u -w -b -p -r1.34.2.11 sprintf.c --- sprintf.c 27 Jul 2005 03:07:01 -0000 1.34.2.11 +++ sprintf.c 9 Sep 2005 10:43:37 -0000 @@ -771,11 +771,12 @@ rb_f_sprintf(argc, argv) } sprint_exit: - /* XXX - We cannot validiate the number of arguments because - * the format string may contain `n$'-style argument selector. + /* XXX - We cannot validiate the number of arguments if (digit)$ style used. */ - if (RTEST(ruby_debug) && posarg >= 0 && nextarg < argc) { - rb_raise(rb_eArgError, "too many arguments for format string"); + if (posarg >= 0 && nextarg < argc) { + const char *mesg = "too many arguments for format string"; + if (RTEST(ruby_debug)) rb_raise(rb_eArgError, mesg); + if (RTEST(ruby_verbose)) rb_warn(mesg); } rb_str_resize(result, blen);