summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog7
-rw-r--r--complex.c1
-rw-r--r--rational.c1
-rw-r--r--test/ruby/test_complex.rb5
-rw-r--r--test/ruby/test_rand.rb7
-rw-r--r--test/ruby/test_rational.rb5
6 files changed, 25 insertions, 1 deletions
diff --git a/ChangeLog b/ChangeLog
index a30c14a..28a6637 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,4 +1,9 @@
-Thu Aug 5 18:25:33 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Thu Aug 5 18:36:11 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * complex.c (nucomp_marshal_load): should check the argument.
+ [ruby-core:31622]
+
+ * rational.c (nurat_marshal_load): ditto
* marshal.c (w_float): should not append a dot if no fractal part
exists. [ruby-dev:41936]
diff --git a/complex.c b/complex.c
index eb9ceae..1052c0c 100644
--- a/complex.c
+++ b/complex.c
@@ -1247,6 +1247,7 @@ static VALUE
nucomp_marshal_load(VALUE self, VALUE a)
{
get_dat1(self);
+ Check_Type(a, T_ARRAY);
dat->real = RARRAY_PTR(a)[0];
dat->imag = RARRAY_PTR(a)[1];
rb_copy_generic_ivar(self, a);
diff --git a/rational.c b/rational.c
index 3965144..6e3b396 100644
--- a/rational.c
+++ b/rational.c
@@ -1602,6 +1602,7 @@ static VALUE
nurat_marshal_load(VALUE self, VALUE a)
{
get_dat1(self);
+ Check_Type(a, T_ARRAY);
dat->num = RARRAY_PTR(a)[0];
dat->den = RARRAY_PTR(a)[1];
rb_copy_generic_ivar(self, a);
diff --git a/test/ruby/test_complex.rb b/test/ruby/test_complex.rb
index f6d65de..b289461 100644
--- a/test/ruby/test_complex.rb
+++ b/test/ruby/test_complex.rb
@@ -633,6 +633,11 @@ class Complex_Test < Test::Unit::TestCase
assert_equal(c, c2)
assert_instance_of(Complex, c2)
end
+
+ bug3656 = '[ruby-core:31622]'
+ assert_raise(TypeError, bug3656) {
+ Complex(1,2).marshal_load(0)
+ }
end
def test_parse
diff --git a/test/ruby/test_rand.rb b/test/ruby/test_rand.rb
index 8ef360b..40b291f 100644
--- a/test/ruby/test_rand.rb
+++ b/test/ruby/test_rand.rb
@@ -427,4 +427,11 @@ END
assert_equal(x0, x2)
end
end
+
+ def test_marshal
+ bug3656 = '[ruby-core:31622]'
+ assert_raise(TypeError, bug3656) {
+ Random.new.marshal_load(0)
+ }
+ end
end
diff --git a/test/ruby/test_rational.rb b/test/ruby/test_rational.rb
index 02d8bd6..2f33ec2 100644
--- a/test/ruby/test_rational.rb
+++ b/test/ruby/test_rational.rb
@@ -797,6 +797,11 @@ class Rational_Test < Test::Unit::TestCase
assert_raise(ZeroDivisionError){
Marshal.load("\x04\bU:\rRational[\ai\x06i\x05")
}
+
+ bug3656 = '[ruby-core:31622]'
+ assert_raise(TypeError, bug3656) {
+ Rational(1,2).marshal_load(0)
+ }
end
def test_parse