| Age | Commit message (Collapse) | Author |
|
Visual C++ 2005 (8.0):
- _MSC_VER: 1400
- MSVCRT_VERSION: 80
|
|
Float `max`
* [DOC] Clarify differences between Kernel.rand and Random.rand
* `Kernel.rand` converts the `max` Float argument to Integer and returns Integer values
* `Random.rand` preserves the `max` Float argument and returns Float values
* Added examples demonstrating the behavioral differences
|
|
We recently converted this to be WB_PROTECTED, but missed some locations
the seed was set.
This is a little bit confusing because as far as I can tell some of the
seeds are set in Ractor local storage, and others on actual objects.
|
|
|
|
First try dedicated system calls, such as `getrandom` or `getentropy`,
next possible libraries, then fallback to `/dev/urandom`.
|
|
This is a follow-up to commit b120f5e38d9c (avoid fork-unsafe arc4random
implementations, 2018-09-04).
Avoid defining a no-op fill_random_bytes_syscall() if arc4random_buf(3)
exists, but we are unsure if it is fork-safe. Check for other options
instead. IOW, see if getrandom(2) is available.
glibc 2.36, released in 2022, started to provide arc4random_buf(3) on
Linux. This causes fill_random_bytes_syscall() to use neither of them
and makes Random.urandom solely rely on getentropy(3) via
fill_random_bytes_urandom().
While the glibc implementation is safe, I did not add it to the list
because using getrandom(2) directly is preferable on Linux.
|
|
If this is not a system call, then it is using getrandom (which would
have been tried already), and cannot be used as a replacement for the
random devices.
|
|
`len` is always at least 1 here.
Notes:
Merged: https://github.com/ruby/ruby/pull/12215
|
|
When loading a crafted marshal data of Random, a pointer to an illegal
address was created. I don't think there is any harm since the data is
normalized before access, but just to be safe, I add a check to make it
an error.
Notes:
Merged: https://github.com/ruby/ruby/pull/12200
|
|
Do not retry `fill_random_bytes` in `Init_RandomSeedCore`, just after
it failed first.
In other places, `rand_init_default` and `random_seed`, no more tweeks
needed once it succeeded
|
|
Also use a typed data.
|
|
This `st_table` is used to both mark and pin classes
defined from the C API. But `vm->mark_object_ary` already
does both much more efficiently.
Currently a Ruby process starts with 252 rooted classes,
which uses `7224B` in an `st_table` or `2016B` in an `RArray`.
So a baseline of 5kB saved, but since `mark_object_ary` is
preallocated with `1024` slots but only use `405` of them,
it's a net `7kB` save.
`vm->mark_object_ary` is also being refactored.
Prior to this changes, `mark_object_ary` was a regular `RArray`, but
since this allows for references to be moved, it was marked a second
time from `rb_vm_mark()` to pin these objects.
This has the detrimental effect of marking these references on every
minors even though it's a mostly append only list.
But using a custom TypedData we can save from having to mark
all the references on minor GC runs.
Addtionally, immediate values are now ignored and not appended
to `vm->mark_object_ary` as it's just wasted space.
|
|
|
|
when the RUBY_FREE_ON_SHUTDOWN environment variable is set, manually free memory at shutdown.
Co-authored-by: Nobuyoshi Nakada <nobu@ruby-lang.org>
Co-authored-by: Peter Zhu <peter@peterzhu.ca>
|
|
* Make its usage more obvious (by providing more detailed
examples);
* Include mention of it into Random itself;
* Small cleanups of docs.
Notes:
Merged: https://github.com/ruby/ruby/pull/5434
|
|
Distinguish initialization by single word from initialization by
array.
|
|
|
|
|
|
|
|
[Misc #18891]
Notes:
Merged: https://github.com/ruby/ruby/pull/6094
|
|
|
|
Notes:
Merged: https://github.com/ruby/ruby/pull/5382
|
|
Notes:
Merged: https://github.com/ruby/ruby/pull/5098
|
|
|
|
|
|
|
|
https://hackerone.com/reports/1306859
Notes:
Merged: https://github.com/ruby/ruby/pull/5239
|
|
|
|
This is a follow-up for commit 265c0022390e ("Do not allocate
ractor-local storage in dfree function during GC", 2021-02-09).
The comparison with the default rb_random_mt_t is useless in the first
place, since it is never equal: no actual Random object is associated
with it.
[Bug #17653] https://bugs.ruby-lang.org/issues/17653
Notes:
Merged: https://github.com/ruby/ruby/pull/4224
|
|
[BCryptGenRandom] is available since Windows Vista / Windows
Server 2008.
Regarding [CryptGenRandom]:
> This API is deprecated. New and existing software should start
> using Cryptography Next Generation APIs. Microsoft may remove
> this API in future releases.
[BCryptGenRandom]: https://docs.microsoft.com/en-us/windows/win32/api/bcrypt/nf-bcrypt-bcryptgenrandom
[CryptGenRandom]: https://docs.microsoft.com/en-us/windows/win32/api/wincrypt/nf-wincrypt-cryptgenrandom
Notes:
Merged: https://github.com/ruby/ruby/pull/4924
|
|
Even though it is called "handle" and prefixed with "H", and its
value looks like a handle.
|
|
Notes:
Merged: https://github.com/ruby/ruby/pull/4821
|
|
Notes:
Merged: https://github.com/ruby/ruby/pull/4783
|
|
Notes:
Merged: https://github.com/ruby/ruby/pull/4762
|
|
Because why not. There was no use case of rng->get_bytes before this
changeset.
Notes:
Merged: https://github.com/ruby/ruby/pull/4602
|
|
__FreeBSD_version is defined in sys/param.h.
Notes:
Merged: https://github.com/ruby/ruby/pull/4457
|
|
* See [Feature #17752]
* Using this to detect them:
git grep -P 'if\s+HAVE' | grep -Pv 'HAVE_LONG_LONG|/ChangeLog|HAVE_TYPEOF'
Notes:
Merged: https://github.com/ruby/ruby/pull/4428
|
|
|
|
Notes:
Merged: https://github.com/ruby/ruby/pull/4289
|
|
Security/Authorization.h defines AuthorizationExternalForm by
using clang extension which allows variably modified types in a
file scope. As we just need high-level accessors only, include
Security/SecRandom.h instead.
|
|
|
|
https://man.openbsd.org/getentropy
Try to fix https://rubyci.s3.amazonaws.com/openbsd-current/ruby-master/log/20210118T023008Z.fail.html.gz
```
compiling random.c
random.c:53:11: fatal error: 'sys/random.h' file not found
# include <sys/random.h>
^~~~~~~~~~~~~~
1 error generated.
```
|
|
using getentropy for seeding, reading 256 bytes at a time to avoid
the EIO errno since this is the maximum.
Notes:
Merged: https://github.com/ruby/ruby/pull/4081
|
|
|
|
|
|
Notes:
Merged: https://github.com/ruby/ruby/pull/3966
|
|
* Closes [Feature #17351].
|
|
* Random::DEFAULT is no longer a Random instance, and referencing it is
more confusing than helpful. Related to [Feature #17351]
|
|
To manage ractor-local data for C extension, the following APIs
are defined.
* rb_ractor_local_storage_value_newkey
* rb_ractor_local_storage_value
* rb_ractor_local_storage_value_set
* rb_ractor_local_storage_ptr_newkey
* rb_ractor_local_storage_ptr
* rb_ractor_local_storage_ptr_set
At first, you need to create a key of storage by
rb_ractor_local_(value|ptr)_newkey().
For ptr storage, it accepts the type of storage,
how to mark and how to free with ractor's lifetime.
rb_ractor_local_storage_value/set are used to access a VALUE
and rb_ractor_local_storage_ptr/set are used to access a pointer.
random.c uses this API.
Notes:
Merged: https://github.com/ruby/ruby/pull/3822
|
|
|