GNU bug report logs -
#13438
24.2.92; Infinite loop in python imenu support
Previous Next
Reported by: Ivan Andrus <darthandrus <at> gmail.com>
Date: Mon, 14 Jan 2013 21:00:02 UTC
Severity: important
Found in version 24.2.92
Done: Fabián Ezequiel Gallina <fabian <at> anue.biz>
Bug is archived. No further changes may be made.
Full log
Message #25 received at 13438 <at> debbugs.gnu.org (full text, mbox):
[Message part 1 (text/plain, inline)]
On 01/25/2013 05:34 AM, Glenn Morris wrote:
>>> Why is this issue (apparently) only seen in Python mode
> Answering my own question, it happens in any mode that sets
> imenu-prev-index-position-function and
> imenu-extract-index-name-function, but there are very few of those.
>
> Eg prolog mode. With buffer contents:
>
> ------
> fac(0,1).
> fac(N,F) :- N > 0, M is N - 1,
> fac(M,Fm), F is N * Fm.
> ------
>
> and point at point-min, switching to prolog-mode causes the same issue.
>
> How about taking the more cautious approach with:
>
> (when (and (= pos (point))
> (not (bobp)))
> (error "Infinite loop... ))
>
> (IIUC, this was actually the suggestion in
> http://lists.gnu.org/archive/html/emacs-devel/2013-01/msg00510.html ?)
I ran into the same thing, and checking bobp is not enough, try adding a
newline at the beginning of file to the recipe and call imenu with point
at beginning of defun and you'll see the infinite error check will trigger.
I proposed the following patch that works:
=== modified file 'lisp/imenu.el'
--- lisp/imenu.el 2013-01-01 09:11:05 +0000
+++ lisp/imenu.el 2013-01-22 18:24:45 +0000
@@ -683,7 +683,14 @@
(goto-char (point-max))
;; Search for the function
(while (funcall imenu-prev-index-position-function)
- (when (= pos (point))
+ (when (and (= pos (point))
+ (= pos
+ (save-excursion
+ ;; The infinite loop is true if there's
+ ;; another index position but point keeps
+ ;; itself in the same place. bug#13438
+ (if (funcall imenu-prev-index-position-
function)
+ (point) 0))))
But finally after some mails with Stefan we decided the best thing will
be to remove this check altogether.
[Message part 2 (text/html, inline)]
This bug report was last modified 12 years and 118 days ago.
Previous Next
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.