From 4289e0cd8126ef963a7aec459f24785de5ee422e Mon Sep 17 00:00:00 2001 From: Tomasz Dąbrowski Date: Mon, 21 Nov 2016 00:37:03 +0100 Subject: Fix for sprintf test exceeding bounds with MRB_INT16 --- mrbgems/mruby-sprintf/test/sprintf.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'mrbgems/mruby-sprintf/test') diff --git a/mrbgems/mruby-sprintf/test/sprintf.rb b/mrbgems/mruby-sprintf/test/sprintf.rb index 454c226e1..478581a49 100644 --- a/mrbgems/mruby-sprintf/test/sprintf.rb +++ b/mrbgems/mruby-sprintf/test/sprintf.rb @@ -5,5 +5,5 @@ assert('String#%') do assert_equal "one=1", "one=%d" % 1 assert_equal "1 one 1.0", "%d %s %3.1f" % [ 1, "one", 1.01 ] assert_equal "123 < 456", "%{num} < %s" % { num: 123, str: "456" } - assert_equal 16, ("%b" % (1<<15)).size + assert_equal 15, ("%b" % (1<<14)).size end -- cgit v1.2.3 From 9bf1c0e1dc09d9aa577554d58d91f3889a77b918 Mon Sep 17 00:00:00 2001 From: Bouke van der Bijl Date: Wed, 23 Nov 2016 15:18:52 -0500 Subject: Fix segfault when Fixnum#chr doesn't return a string --- mrbgems/mruby-sprintf/src/sprintf.c | 1 + mrbgems/mruby-sprintf/test/sprintf.rb | 23 +++++++++++++++++++++++ 2 files changed, 24 insertions(+) (limited to 'mrbgems/mruby-sprintf/test') diff --git a/mrbgems/mruby-sprintf/src/sprintf.c b/mrbgems/mruby-sprintf/src/sprintf.c index 8d14b0fc5..ccee23bd2 100644 --- a/mrbgems/mruby-sprintf/src/sprintf.c +++ b/mrbgems/mruby-sprintf/src/sprintf.c @@ -675,6 +675,7 @@ retry: else { mrb_raise(mrb, E_ARGUMENT_ERROR, "invalid character"); } + mrb_check_type(mrb, tmp, MRB_TT_STRING); c = RSTRING_PTR(tmp); n = RSTRING_LEN(tmp); if (!(flags & FWIDTH)) { diff --git a/mrbgems/mruby-sprintf/test/sprintf.rb b/mrbgems/mruby-sprintf/test/sprintf.rb index 478581a49..ccbd95d51 100644 --- a/mrbgems/mruby-sprintf/test/sprintf.rb +++ b/mrbgems/mruby-sprintf/test/sprintf.rb @@ -7,3 +7,26 @@ assert('String#%') do assert_equal "123 < 456", "%{num} < %s" % { num: 123, str: "456" } assert_equal 15, ("%b" % (1<<14)).size end + +assert("String#% with invalid chr") do + begin + class Fixnum + alias_method :chr_, :chr if method_defined?(:chr) + + def chr + nil + end + end + + assert_raise TypeError do + "%c" % 0 + end + ensure + class Fixnum + if method_defined?(:chr_) + alias_method :chr, :chr_ + remove_method :chr_ + end + end + end +end -- cgit v1.2.3