lib/compat/securerandom.rb in uuidtools-1.0.6 vs lib/compat/securerandom.rb in uuidtools-1.0.7
- old
+ new
@@ -158,16 +158,19 @@
def self.random_number(n=0)
if 0 < n
hex = n.to_s(16)
hex = '0' + hex if (hex.length & 1) == 1
bin = [hex].pack("H*")
- mask = bin[0].ord
+ first = bin[0..0]
+ mask = first.respond_to?(:ord) ? first.ord : first.sum(8)
mask |= mask >> 1
mask |= mask >> 2
mask |= mask >> 4
begin
rnd = SecureRandom.random_bytes(bin.length)
- rnd[0] = (rnd[0].ord & mask).chr
+ first = rnd[0..0]
+ ordinal = first.respond_to?(:ord) ? first.ord : first.sum(8)
+ rnd[0..0] = (ordinal & mask).chr
end until rnd < bin
rnd.unpack("H*")[0].hex
else
# assumption: Float::MANT_DIG <= 64
i64 = SecureRandom.random_bytes(8).unpack("Q")[0]