diff options
author | Shigeru Fukaya <shigeru.fukaya@gmail.com> | 2015-07-26 10:43:10 -0700 |
---|---|---|
committer | Paul Eggert <eggert@cs.ucla.edu> | 2015-07-26 10:43:28 -0700 |
commit | 4c55786d9b2a5d571f3e543cc261ce0702c7341e (patch) | |
tree | 676c9e5a2663ff32c744a45814f82ac3abc23159 | |
parent | fac8492664246c49ee145802cc124aa9e1636e7b (diff) | |
download | emacs-4c55786d9b2a5d571f3e543cc261ce0702c7341e.tar.gz |
Fix infinite loop in delete-consecutive-dups
* lisp/subr.el (delete-consecutive-dups): Work even if the last
element is nil (Bug#20588). Avoid rescan of a circular list in
deletion of last element.
-rw-r--r-- | lisp/subr.el | 12 |
1 files changed, 6 insertions, 6 deletions
diff --git a/lisp/subr.el b/lisp/subr.el index e2c1baea442..bfdc0ff4a13 100644 --- a/lisp/subr.el +++ b/lisp/subr.el @@ -440,16 +440,16 @@ one is kept." First and last elements are considered consecutive if CIRCULAR is non-nil." (let ((tail list) last) - (while (consp tail) + (while (cdr tail) (if (equal (car tail) (cadr tail)) (setcdr tail (cddr tail)) - (setq last (car tail) + (setq last tail tail (cdr tail)))) (if (and circular - (cdr list) - (equal last (car list))) - (nbutlast list) - list))) + last + (equal (car tail) (car list))) + (setcdr last nil))) + list) (defun number-sequence (from &optional to inc) "Return a sequence of numbers from FROM to TO (both inclusive) as a list. |