From: Shigeru Fukaya Date: Sun, 26 Jul 2015 17:43:10 +0000 (-0700) Subject: Fix infinite loop in delete-consecutive-dups X-Git-Tag: emacs-25.0.90~1431 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=4c55786d9b2a5d571f3e543cc261ce0702c7341e;p=emacs.git 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. --- 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.