[ruby-core:81392] [Ruby trunk Bug#10093] SecureRandom.uuid is not valid v4 or RFC 4122

From: im@...
Date: 2017-05-26 13:54:27 UTC
List: ruby-core #81392
Issue #10093 has been updated by kulikov-im (Evgeniy Kulikov).

Subject changed from SecureRandom.uuid is unstable to SecureRandom.uuid is not valid v4 or RFC 4122
ruby -v changed from ruby 2.1.2p95 (2014-05-08 revision 45877) [x86_64-darwin13.0] to ruby 2.4.1p111 (2017-03-22 revision 58053) [x86_64-darwin16]

https://www.ietf.org/rfc/rfc4122.txt (#4.4)
---

current test is https://github.com/ruby/ruby/blob/ruby_2_4/test/test_securerandom.rb#L174

```ruby
def test_uuid
  uuid = @it.uuid
  assert_equal(36, uuid.size)
  assert_match(/\A\h{8}-\h{4}-\h{4}-\h{4}-\h{12}\z/, uuid)
end
```

thats not valid

Here Golang example of test-case - https://github.com/satori/go.uuid/blob/master/uuid_test.go#L589

must check:

- UUID Version

```ruby
uuid.bytes[6] >> 4 == 4
```

- RFC4122

```ruby
(uuid.bytes[8] & 0xc0) | 0x80 == 0x80
```

valid test-case is:

```ruby
def test_uuid
  uuid = @it.uuid

  assert_equal(36, uuid.size)

  # Check UUID Version:
  assert_equal(uuid.bytes[6] >> 4, 4)

  # Check RFC4122
  assert_equal((uuid[8] & 0xc0) | 0x80, 0x80)

  assert_match(/\A\h{8}-\h{4}-\h{4}-\h{4}-\h{12}\z/, uuid)
end
```

----------------------------------------
Bug #10093: SecureRandom.uuid is not valid v4 or RFC 4122
https://bugs.ruby-lang.org/issues/10093#change-65105

* Author: kidlab (Man Vuong)
* Status: Third Party's Issue
* Priority: Normal
* Assignee: 
* Target version: 2.2.0
* ruby -v: ruby 2.4.1p111 (2017-03-22 revision 58053) [x86_64-darwin16]
* Backport: 2.0.0: UNKNOWN, 2.1: UNKNOWN
----------------------------------------
SecureRandom.uuid sometimes generates some value like this:
e7be09bb-e939-43db-9c20-dfad9c27fd3g

And it's not a valid UUID. This problem occurred randomly for me, I don't know how to reproduce :(



-- 
https://bugs.ruby-lang.org/

Unsubscribe: <mailto:ruby-core-request@ruby-lang.org?subject=unsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>

In This Thread

Prev Next