diff --git a/mrbgems/mruby-sprintf/src/sprintf.c b/mrbgems/mruby-sprintf/src/sprintf.c index f49c3d6f8..eec001264 100644 --- a/mrbgems/mruby-sprintf/src/sprintf.c +++ b/mrbgems/mruby-sprintf/src/sprintf.c @@ -607,7 +607,10 @@ mrb_str_format(mrb_state *mrb, mrb_int argc, const mrb_value *argv, mrb_value fm for (t = p; t < end && *t != '%'; t++) ; - if (t + 1 == end) t++; + if (t + 1 == end) { + /* % at the bottom */ + mrb_raise(mrb, E_ARGUMENT_ERROR, "incomplete format specifier; use %% (double %) instead"); + } PUSH(p, t - p); if (t >= end) goto sprint_exit; /* end of fmt string */ diff --git a/mrbgems/mruby-sprintf/test/sprintf.rb b/mrbgems/mruby-sprintf/test/sprintf.rb index aedc2787a..1b1fe95f1 100644 --- a/mrbgems/mruby-sprintf/test/sprintf.rb +++ b/mrbgems/mruby-sprintf/test/sprintf.rb @@ -90,8 +90,3 @@ assert("String#% invalid format") do "%?" % "" end end - -assert("String#% invalid format shared substring") do - fmt = ("x"*30+"%!")[0...-1] - assert_equal fmt, sprintf(fmt, "") -end