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/