Kouhei Sutou
null+****@clear*****
Thu Jul 30 12:18:53 JST 2015
Kouhei Sutou 2015-07-30 12:18:53 +0900 (Thu, 30 Jul 2015) New Revision: 4e9b81cf62423d3b7c294058578925908d2ea23c https://github.com/groonga/groonga/commit/4e9b81cf62423d3b7c294058578925908d2ea23c Message: mrb: fix a overflow bug for Converter.convert("2038/...", Time) Added files: test/command/suite/ruby/eval/convert/string_to_time/over_int32.expected test/command/suite/ruby/eval/convert/string_to_time/over_int32.test Modified files: lib/mrb/mrb_bulk.c Modified: lib/mrb/mrb_bulk.c (+8 -2) =================================================================== --- lib/mrb/mrb_bulk.c 2015-07-29 17:47:50 +0900 (855ffd7) +++ lib/mrb/mrb_bulk.c 2015-07-30 12:18:53 +0900 (652236f) @@ -119,16 +119,22 @@ grn_mrb_value_from_bulk(mrb_state *mrb, grn_obj *bulk) case GRN_DB_TIME : { int64_t value; - int32_t sec; + int64_t sec; int32_t usec; + mrb_value mrb_sec; value = GRN_TIME_VALUE(bulk); GRN_TIME_UNPACK(value, sec, usec); + if (sec > MRB_INT_MAX) { + mrb_sec = mrb_float_value(mrb, sec); + } else { + mrb_sec = mrb_fixnum_value(sec); + } mrb_value_ = mrb_funcall(mrb, mrb_obj_value(ctx->impl->mrb.builtin.time_class), "at", 2, - mrb_fixnum_value(sec), + mrb_sec, mrb_fixnum_value(usec)); } break; Added: test/command/suite/ruby/eval/convert/string_to_time/over_int32.expected (+4 -0) 100644 =================================================================== --- /dev/null +++ test/command/suite/ruby/eval/convert/string_to_time/over_int32.expected 2015-07-30 12:18:53 +0900 (1f9afeb) @@ -0,0 +1,4 @@ +register ruby/eval +[[0,0.0,0.0],true] +ruby_eval 'Groonga::Converter.convert("2039/1/1 00:00:00", Time).to_s' +[[0,0.0,0.0],{"value":"Sat Jan 01 00:00:00 2039"}] Added: test/command/suite/ruby/eval/convert/string_to_time/over_int32.test (+5 -0) 100644 =================================================================== --- /dev/null +++ test/command/suite/ruby/eval/convert/string_to_time/over_int32.test 2015-07-30 12:18:53 +0900 (892b3f2) @@ -0,0 +1,5 @@ +#@on-error omit +register ruby/eval +#@on-error default + +ruby_eval 'Groonga::Converter.convert("2039/1/1 00:00:00", Time).to_s' -------------- next part -------------- HTML����������������������������...Download