lib/securerandom.rb: test one byte to determine urandom or openssl
`SecureRandom#gen_random` determines whether urandom is available or not by trying `Random.urandom(n)`. But, when n = 0, `Random.urandom(0)` always succeeds even if urandom is not available, which leads to a wrong decision. When failed, `Random.urandom` returns nil instead of returning a shorter string than required. So the check for `ret.length != n` is not needed. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@59840 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
bfa3d672d1
commit
3b08df649e
@ -52,7 +52,7 @@ module SecureRandom
|
||||
end
|
||||
|
||||
def gen_random(n)
|
||||
ret = Random.urandom(n)
|
||||
ret = Random.urandom(1)
|
||||
if ret.nil?
|
||||
begin
|
||||
require 'openssl'
|
||||
@ -67,10 +67,6 @@ module SecureRandom
|
||||
end
|
||||
return gen_random(n)
|
||||
end
|
||||
elsif ret.length != n
|
||||
raise NotImplementedError, \
|
||||
"Unexpected partial read from random device: " \
|
||||
"only #{ret.length} for #{n} bytes"
|
||||
else
|
||||
@rng_chooser.synchronize do
|
||||
class << self
|
||||
|
Loading…
x
Reference in New Issue
Block a user