Fix: Math:gen_rngのseedにnumを与え、options.algorithmにchacha20を指定した或いは何も指定しなかった場合、seed & 255を内部的にseedとしてしまう問題を修正。
#1019
+47
−9
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
What
#731 を実装した際、Float64ArrayをUint8Array() constructorの第一引数に指定した場合の仕様の理解が間違っており、
numで与えられたシード値が意図せず& 255されてしまっていました。本修正では、
TypedArray.prototype.bufferを取る事により、#731 の実装時に意図したように、numberの内部表現をそのままseedとして使用することにより、3.0と3.0000000000000004で異なる出力を得られるようになります。これにより、全く同じ
seedでも、修正前と修正後で出力が変わります。また、本修正後も旧来の動作を再現できるよう、関数
Math:gen_rngのoptions.chacha20NumberSeedLegacyBehaviour(デフォルト:false)にtrueを指定した場合、修正前の動作をする機能を追加しました。Before:
After:
Why
某Playの出力が複数日連続で同一となった事により発覚。
algorithmにrc4を指定した場合と挙動が大きく異なるため。Additional info (optional)
Workaround for versions before this fix
seedを与える前に.to_str()等でstringに変換する