Subject: Re: bug#1116: Emacs hangs when executing Info-final-node

From: martin rudalics <[email-masked]>
Date: Wed, 08 Oct 2008 16:58:00 +0200

> I' running GNU Emacs 22.3.1 (i386-mingw-nt5.1.2600) of 2008-09-07 on SOFT-MJASON
 >
 > D:\> runemacs -Q --debug-init
 >
 > C-h i       ;; open *info*
 > Press '>'  ;; execute 'Info-final-node and emacs hangs!
 >
 > Always reproduced.

Would the attached patch help?

martin
*** info.el.~1.501.2.7.~	2008-03-25 14:48:24.000000000 +0100
--- info.el	2008-10-08 16:52:49.703125000 +0200
***************
*** 2437,2449 ****
      (Info-goto-node (Info-extract-menu-counting nil))
      ;; If the last node in the menu is not last in pointer structure,
      ;; move forward until we can't go any farther.
!     (while (Info-forward-node t t) nil)
      ;; Then keep moving down to last subnode, unless we reach an index.
      (while (and (not (Info-index-node))
  		(save-excursion (search-forward "\n* Menu:" nil t)))
        (Info-goto-node (Info-extract-menu-counting nil)))))
  
! (defun Info-forward-node (&optional not-down no-error)
    "Go forward one node, considering all nodes as forming one sequence."
    (interactive)
    (goto-char (point-min))
--- 2437,2449 ----
      (Info-goto-node (Info-extract-menu-counting nil))
      ;; If the last node in the menu is not last in pointer structure,
      ;; move forward until we can't go any farther.
!     (while (Info-forward-node t t t) nil)
      ;; Then keep moving down to last subnode, unless we reach an index.
      (while (and (not (Info-index-node))
  		(save-excursion (search-forward "\n* Menu:" nil t)))
        (Info-goto-node (Info-extract-menu-counting nil)))))
  
! (defun Info-forward-node (&optional not-down no-error not-up)
    "Go forward one node, considering all nodes as forming one sequence."
    (interactive)
    (goto-char (point-min))
***************
*** 2461,2467 ****
  	  ((save-excursion (search-backward "next:" nil t))
  	   (Info-next)
  	   t)
! 	  ((and (save-excursion (search-backward "up:" nil t))
  		;; Use string-equal, not equal, to ignore text props.
  		(not (string-equal (downcase (Info-extract-pointer "up"))
  				   "top")))
--- 2461,2468 ----
  	  ((save-excursion (search-backward "next:" nil t))
  	   (Info-next)
  	   t)
! 	  ((and (not not-up)
! 		(save-excursion (search-backward "up:" nil t))
  		;; Use string-equal, not equal, to ignore text props.
  		(not (string-equal (downcase (Info-extract-pointer "up"))
  				   "top")))