[前][次][番号順一覧][スレッド一覧]

ruby-changes:12525

From: mame <ko1@a...>
Date: Tue, 21 Jul 2009 23:51:57 +0900 (JST)
Subject: [ruby-changes:12525] Ruby:r24228 (trunk): * random.c (rand_init): array length of random seed was broken, which

mame	2009-07-21 23:51:17 +0900 (Tue, 21 Jul 2009)

  New Revision: 24228

  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=24228

  Log:
    * random.c (rand_init): array length of random seed was broken, which
      causes memory error with srand(2**1000000-1).
    * test/ruby/test_rand.c: test for above.

  Modified files:
    trunk/ChangeLog
    trunk/random.c
    trunk/test/ruby/test_rand.rb

Index: ChangeLog
===================================================================
--- ChangeLog	(revision 24227)
+++ ChangeLog	(revision 24228)
@@ -1,3 +1,10 @@
+Tue Jul 21 23:47:38 2009  Yusuke Endoh  <mame@t...>
+
+	* random.c (rand_init): array length of random seed was broken, which
+	  causes memory error with srand(2**1000000-1).
+
+	* test/ruby/test_rand.c: test for above.
+
 Tue Jul 21 21:37:19 2009  Keiju Ishitsuka  <keiju@e...>
 
 	* lib/irb/cmd/help.rb: fixed irb's "help" command. [ruby-core:22310].
Index: test/ruby/test_rand.rb
===================================================================
--- test/ruby/test_rand.rb	(revision 24227)
+++ test/ruby/test_rand.rb	(revision 24228)
@@ -164,4 +164,9 @@
     srand(0)
     assert_equal([1,4,2,5,3], [1,2,3,4,5].shuffle)
   end
+
+  def test_big_seed
+    srand(2**1000000-1)
+    assert_equal(1143843490, rand(0x100000000))
+  end
 end
Index: random.c
===================================================================
--- random.c	(revision 24227)
+++ random.c	(revision 24228)
@@ -304,11 +304,9 @@
 	if (blen == 0) {
 	    len = 1;
 	}
-	else if (blen > MT_MAX_STATE * SIZEOF_INT32 / SIZEOF_BDIGITS) {
-	    blen = (len = MT_MAX_STATE) * SIZEOF_INT32 / SIZEOF_BDIGITS;
-	    len = roomof(len, SIZEOF_INT32);
-	}
 	else {
+	    if (blen > MT_MAX_STATE * SIZEOF_INT32 / SIZEOF_BDIGITS)
+		blen = (len = MT_MAX_STATE) * SIZEOF_INT32 / SIZEOF_BDIGITS;
 	    len = roomof((int)blen * SIZEOF_BDIGITS, SIZEOF_INT32);
 	}
 	/* allocate ints for init_by_array */

--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

[前][次][番号順一覧][スレッド一覧]