[Groonga-commit] groonga/groonga at 4e9b81c [master] mrb: fix a overflow bug for Converter.convert("2038/...", Time)

Back to archive index

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 



More information about the Groonga-commit mailing list
Back to archive index