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

ruby-changes:37518

From: nobu <ko1@a...>
Date: Sat, 14 Feb 2015 14:40:39 +0900 (JST)
Subject: [ruby-changes:37518] nobu:r49599 (trunk): random.c: ArgumentError for invalid argument

nobu	2015-02-14 14:40:10 +0900 (Sat, 14 Feb 2015)

  New Revision: 49599

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

  Log:
    random.c: ArgumentError for invalid argument
    
    * random.c (rand_random_number): raise ArgumentError for invalid
      argument like as SecureRandom.random_number.

  Modified files:
    trunk/random.c
Index: random.c
===================================================================
--- random.c	(revision 49598)
+++ random.c	(revision 49599)
@@ -1077,6 +1077,19 @@ invalid_argument(VALUE arg0) https://github.com/ruby/ruby/blob/trunk/random.c#L1077
     rb_raise(rb_eArgError, "invalid argument - %"PRIsVALUE, arg0);
 }
 
+static VALUE
+check_random_number(VALUE v, const VALUE *argv)
+{
+    switch (v) {
+      case Qfalse:
+	(void)NUM2LONG(argv[0]);
+	break;
+      case Qnil:
+	invalid_argument(argv[0]);
+    }
+    return v;
+}
+
 static inline double
 float_value(VALUE v)
 {
@@ -1198,7 +1211,7 @@ static VALUE https://github.com/ruby/ruby/blob/trunk/random.c#L1211
 random_rand(int argc, VALUE *argv, VALUE obj)
 {
     VALUE v = rand_random(argc, argv, obj, get_rnd(obj));
-    if (NIL_P(v)) invalid_argument(argv[0]);
+    check_random_number(v, argv);
     return v;
 }
 
@@ -1242,8 +1255,7 @@ rand_random(int argc, VALUE *argv, VALUE https://github.com/ruby/ruby/blob/trunk/random.c#L1255
 	/* nothing to do */
     }
     else {
-	v = Qnil;
-	(void)NUM2LONG(vmax);
+	return Qfalse;
     }
     return v;
 }
@@ -1254,6 +1266,7 @@ rand_random_number(int argc, VALUE *argv https://github.com/ruby/ruby/blob/trunk/random.c#L1266
     rb_random_t *rnd = try_get_rnd(obj);
     VALUE v = rand_random(argc, argv, obj, rnd);
     if (NIL_P(v)) v = rand_random(0, 0, obj, rnd);
+    else if (!v) invalid_argument(argv[0]);
     return v;
 }
 
@@ -1358,7 +1371,7 @@ static VALUE https://github.com/ruby/ruby/blob/trunk/random.c#L1371
 random_s_rand(int argc, VALUE *argv, VALUE obj)
 {
     VALUE v = rand_random(argc, argv, Qnil, rand_start(&default_rand));
-    if (NIL_P(v)) invalid_argument(argv[0]);
+    check_random_number(v, argv);
     return v;
 }
 

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

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