From 0878900fda882cdf597ba2bef9e2c8fe1809647a Mon Sep 17 00:00:00 2001 From: "Yukihiro \"Matz\" Matsumoto" Date: Sun, 3 Aug 2014 20:36:20 +0900 Subject: Time#to_i and Time#usec should care about mrb_int overflow on MRB_INT16; ref #2495 --- mrbgems/mruby-time/src/time.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/mrbgems/mruby-time/src/time.c b/mrbgems/mruby-time/src/time.c index 8903c522a..f9dd0cb33 100644 --- a/mrbgems/mruby-time/src/time.c +++ b/mrbgems/mruby-time/src/time.c @@ -673,6 +673,11 @@ mrb_time_to_i(mrb_state *mrb, mrb_value self) struct mrb_time *tm; tm = DATA_GET_PTR(mrb, self, &mrb_time_type, struct mrb_time); +#ifdef MRB_INT16 + if (tm->sec > MRB_INT_MAX || tm->sec < MRB_INT_MIN) { + return mrb_float_value(mrb, (mrb_float)tm->sec); + } +#endif return mrb_fixnum_value((mrb_int)tm->sec); } @@ -684,6 +689,11 @@ mrb_time_usec(mrb_state *mrb, mrb_value self) struct mrb_time *tm; tm = DATA_GET_PTR(mrb, self, &mrb_time_type, struct mrb_time); +#ifdef MRB_INT16 + if (tm->usec > MRB_INT_MAX || tm->usec < MRB_INT_MIN) { + return mrb_float_value(mrb, (mrb_float)tm->usec); + } +#endif return mrb_fixnum_value((mrb_int)tm->usec); } -- cgit v1.2.3