summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorYukihiro Matsumoto <[email protected]>2012-05-07 18:02:32 +0900
committerYukihiro Matsumoto <[email protected]>2012-05-07 18:02:32 +0900
commit4f1f243fe7e34acf6249d32cc68eedc8ff5bccbf (patch)
tree5c00b7517c1bd2aa5b072d04914847a6ab040a33
parent9bed29bf966223c9da792ca2590f8a9a6fd3bf2f (diff)
downloadmruby-4f1f243fe7e34acf6249d32cc68eedc8ff5bccbf.tar.gz
mruby-4f1f243fe7e34acf6249d32cc68eedc8ff5bccbf.zip
initialize_copy: copy destination object may not be intialized
-rw-r--r--src/time.c4
-rw-r--r--test/test_time.rb3
2 files changed, 5 insertions, 2 deletions
diff --git a/src/time.c b/src/time.c
index 16884d9d8..ed42f1f76 100644
--- a/src/time.c
+++ b/src/time.c
@@ -496,6 +496,10 @@ mrb_time_initialize_copy(mrb_state *mrb, mrb_value copy)
if (!mrb_obj_is_instance_of(mrb, src, mrb_obj_class(mrb, copy))) {
mrb_raise(mrb, E_TYPE_ERROR, "wrong argument class");
}
+ if (!DATA_PTR(copy)) {
+ DATA_PTR(copy) = mrb_malloc(mrb, sizeof(struct mrb_time));
+ DATA_TYPE(copy) = &mrb_time_type;
+ }
memcpy(DATA_PTR(copy), DATA_PTR(src), sizeof(struct mrb_time));
return copy;
}
diff --git a/test/test_time.rb b/test/test_time.rb
index 79d658e1b..ea6e98696 100644
--- a/test/test_time.rb
+++ b/test/test_time.rb
@@ -43,7 +43,6 @@ assert("yday") { t1.yday == 71 }
assert("year") { t1.year == 2011 }
t2 = Time.at(7.0e6)
-t1.initialize_copy(t2)
-assert("initialize_copy") { t1 == t2 }
+assert("initialize_copy") { t2.clone == t2 }
report()