Commit f7ffc4b7 authored by Eli Zaretskii's avatar Eli Zaretskii
Browse files

Fix infloop in 'number-sequence'

* lisp/subr.el (number-sequence): Avoid overflow leading to an
infloop.  (Bug#23627)

* test/automated/subr-tests.el (number-sequence-test): New test.
parent 4ab2673d
......@@ -484,13 +484,16 @@ of course, also replace TO with a slightly larger value
(list from)
(or inc (setq inc 1))
(when (zerop inc) (error "The increment can not be zero"))
(let (seq (n 0) (next from))
(let (seq (n 0) (next from) (last from))
(if (> inc 0)
(while (<= next to)
;; The (>= next last) condition protects against integer
;; overflow in computing NEXT.
(while (and (>= next last) (<= next to))
(setq seq (cons next seq)
n (1+ n)
last next
next (+ from (* n inc))))
(while (>= next to)
(while (and (<= next last) (>= next to))
(setq seq (cons next seq)
n (1+ n)
next (+ from (* n inc)))))
......
......@@ -61,6 +61,15 @@
(quote
(0 font-lock-keyword-face))))))))
(ert-deftest number-sequence-test ()
(should (= (length
(number-sequence (1- most-positive-fixnum) most-positive-fixnum))
2))
(should (= (length
(number-sequence
(1+ most-negative-fixnum) most-negative-fixnum -1))
2)))
(ert-deftest string-comparison-test ()
(should (string-lessp "abc" "acb"))
(should (string-lessp "aBc" "abc"))
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment