Mercurial > emacs
changeset 106796:9479a9da9b8c
(imenu-default-create-index-function): Detect infinite
loops caused by imenu-prev-index-position-function.
author | Sam Steingold <sds@gnu.org> |
---|---|
date | Mon, 11 Jan 2010 15:53:23 -0500 |
parents | 8802f28da1a8 |
children | 2fb043738725 |
files | lisp/ChangeLog lisp/imenu.el |
diffstat | 2 files changed, 10 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/lisp/ChangeLog Mon Jan 11 18:26:28 2010 +0100 +++ b/lisp/ChangeLog Mon Jan 11 15:53:23 2010 -0500 @@ -1,3 +1,8 @@ +2010-01-11 Sam Steingold <sds@gnu.org> + + * imenu.el (imenu-default-create-index-function): Detect infinite + loops caused by imenu-prev-index-position-function. + 2010-01-11 Juanma Barranquero <lekktu@gmail.com> * htmlfontify.el (htmlfontify-load-rgb-file)
--- a/lisp/imenu.el Mon Jan 11 18:26:28 2010 +0100 +++ b/lisp/imenu.el Mon Jan 11 15:53:23 2010 -0500 @@ -596,7 +596,7 @@ ;;; Find all markers in alist and makes ;;; them point nowhere. ;;; The top-level call uses nil as the argument; -;;; non-nil arguments are in recursivecalls. +;;; non-nil arguments are in recursive calls. (defvar imenu--cleanup-seen) (defun imenu--cleanup (&optional alist) @@ -684,12 +684,15 @@ ;; in these major modes. But save that change for later. (cond ((and imenu-prev-index-position-function imenu-extract-index-name-function) - (let ((index-alist '()) + (let ((index-alist '()) (pos (point)) prev-pos name) (goto-char (point-max)) (imenu-progress-message prev-pos 0 t) ;; Search for the function (while (funcall imenu-prev-index-position-function) + (when (= pos (point)) + (error "Infinite loop at %s:%d: imenu-prev-index-position-function does not move point" (buffer-name) pos)) + (setq pos (point)) (imenu-progress-message prev-pos nil t) (save-excursion (setq name (funcall imenu-extract-index-name-function)))