mirror of
https://git.savannah.gnu.org/git/emacs.git
synced 2025-01-07 15:21:46 +00:00
Avoid unbounded growth of cl-random-state components (bug#38753)
* lisp/emacs-lisp/cl-extra.el (cl-random): Perform the modulo 2**23 operation before updating the state instead of after. The result is always the same, but it prevents the state from growing into arbitrary large bignums. Patch from Christopher Wellons.
This commit is contained in:
parent
d6922db49d
commit
aa0c679f48
@ -469,7 +469,7 @@ Optional second arg STATE is a random-state object."
|
||||
(while (< (setq i (1+ i)) 200) (cl-random 2 state))))
|
||||
(let* ((i (cl-callf (lambda (x) (% (1+ x) 55)) (cl--random-state-i state)))
|
||||
(j (cl-callf (lambda (x) (% (1+ x) 55)) (cl--random-state-j state)))
|
||||
(n (logand 8388607 (aset vec i (- (aref vec i) (aref vec j))))))
|
||||
(n (aset vec i (logand 8388607 (- (aref vec i) (aref vec j))))))
|
||||
(if (integerp lim)
|
||||
(if (<= lim 512) (% n lim)
|
||||
(if (> lim 8388607) (setq n (+ (ash n 9) (cl-random 512 state))))
|
||||
|
Loading…
Reference in New Issue
Block a user