GNU bug report logs - #79037
14.0.9; Fixing infinite loop with `TeX-previous-error'

Previous Next

Package: auctex;

Reported by: bram.adams <at> queensu.ca

Date: Thu, 17 Jul 2025 11:06:01 UTC

Severity: normal

Found in version 14.0.9

To reply to this bug, email your comments to 79037 AT debbugs.gnu.org.

Toggle the display of automated, internal messages from the tracker.

View this report as an mbox folder, status mbox, maintainer mbox


Report forwarded to bug-auctex <at> gnu.org:
bug#79037; Package auctex. (Thu, 17 Jul 2025 11:06:02 GMT) Full text and rfc822 format available.

Acknowledgement sent to bram.adams <at> queensu.ca:
New bug report received and forwarded. Copy sent to bug-auctex <at> gnu.org. (Thu, 17 Jul 2025 11:06:02 GMT) Full text and rfc822 format available.

Message #5 received at submit <at> debbugs.gnu.org (full text, mbox):

From: bram.adams <at> queensu.ca
To: bug-auctex <at> gnu.org
Subject: 14.0.9; Fixing infinite loop with `TeX-previous-error'
Date: Wed, 16 Jul 2025 20:38:45 -0400
[Message part 1 (text/plain, inline)]
Hi,

When `TeX-debug-warnings' and `TeX-suppress-ignored-warnings' are enabled, invoking `TeX-previous-error' can lead to an infinite loop in `TeX-parse-TeX'. As the `unless' condition always fails, `arg' is never incremented to 0, hence the value of `TeX-error-last-visited' decrements forever. There are no issues when invoking `TeX-next-error'.

The attached patch seems to fix this bug with `TeX-previous-error'.

Kind regards,

Bram Adams


Emacs  : GNU Emacs 30.1 (build 1, aarch64-apple-darwin24.3.0, NS appkit-2575.40 Version 15.3 (Build 24D60))
 of 2025-03-06
Package: 14.0.9

current state:
==============
(setq
 window-system 'ns
 LaTeX-version "2e"
 TeX-style-path '("~/.emacs.d/auctex/" "~/.emacs.d/elpaca/builds/auctex/style" "~/.emacs.d/auctex/auto" "~/.emacs.d/auctex/style" "auto" "style")
 TeX-auto-save nil
 TeX-parse-self nil
 TeX-master t
 TeX-command-list '(("LatexMk" "latexmk %(-PDF)%S%(mode) %(file-line-error) %(extraopts) %t" TeX-run-latexmk nil (LaTeX-mode plain-tex-mode latex-mode doctex-mode) :help "Run LatexMk") ("TeX" "%(PDF)%(tex) %(file-line-error) %`%(extraopts) %S%(PDFout)%(mode)%' %(output-dir) %t" TeX-run-TeX nil (plain-TeX-mode AmSTeX-mode Texinfo-mode) :help "Run plain TeX")
                    ("LaTeX" "%`%l%(mode)%' %T" TeX-run-TeX nil (LaTeX-mode docTeX-mode) :help "Run LaTeX") ("Makeinfo" "makeinfo %(extraopts) %(o-dir) %t" TeX-run-compile nil (Texinfo-mode) :help "Run Makeinfo with Info output")
                    ("Makeinfo HTML" "makeinfo %(extraopts) %(o-dir) --html %t" TeX-run-compile nil (Texinfo-mode) :help "Run Makeinfo with HTML output") ("AmSTeX" "amstex %(PDFout) %`%(extraopts) %S%(mode)%' %(output-dir) %t" TeX-run-TeX nil (AmSTeX-mode) :help "Run AMSTeX")
                    ("ConTeXt" "%(cntxcom) --once %(extraopts) %(execopts)%t" TeX-run-TeX nil (ConTeXt-mode) :help "Run ConTeXt once") ("ConTeXt Full" "%(cntxcom) %(extraopts) %(execopts)%t" TeX-run-TeX nil (ConTeXt-mode) :help "Run ConTeXt until completion")
                    ("BibTeX" "bibtex %(O?aux)" TeX-run-BibTeX nil (plain-TeX-mode LaTeX-mode docTeX-mode AmSTeX-mode Texinfo-mode ConTeXt-mode) :help "Run BibTeX") ("Biber" "biber %(output-dir) %s" TeX-run-Biber nil (plain-TeX-mode LaTeX-mode docTeX-mode AmSTeX-mode Texinfo-mode) :help "Run Biber")
                    ("Texindex" "texindex %s.??" TeX-run-command nil (Texinfo-mode) :help "Run Texindex") ("Texi2dvi" "%(PDF)texi2dvi %t" TeX-run-command nil (Texinfo-mode) :help "Run Texi2dvi or Texi2pdf") ("View" "%V" TeX-run-discard-or-function t t :help "Run Viewer") ("Print" "%p" TeX-run-command t t :help "Print the file")
                    ("Queue" "%q" TeX-run-background nil t :help "View the printer queue" :visible TeX-queue-command) ("File" "%(o?)dvips %d -o %f " TeX-run-dvips t (plain-TeX-mode LaTeX-mode docTeX-mode AmSTeX-mode Texinfo-mode) :help "Generate PostScript file")
                    ("Dvips" "%(o?)dvips %d -o %f " TeX-run-dvips nil (plain-TeX-mode LaTeX-mode docTeX-mode AmSTeX-mode Texinfo-mode) :help "Convert DVI file to PostScript") ("Dvipdfmx" "dvipdfmx -o %(O?pdf) %d" TeX-run-dvipdfmx nil (plain-TeX-mode LaTeX-mode docTeX-mode AmSTeX-mode Texinfo-mode) :help "Convert DVI file to PDF with dvipdfmx")
                    ("Ps2pdf" "ps2pdf %f %(O?pdf)" TeX-run-ps2pdf nil (plain-TeX-mode LaTeX-mode docTeX-mode AmSTeX-mode Texinfo-mode) :help "Convert PostScript file to PDF") ("LaTeXMk" "latexmk %(latexmk-out) %(file-line-error) %(output-dir) %`%(extraopts) %S%(mode)%' %t" TeX-run-TeX nil (LaTeX-mode docTeX-mode) :help "Run LaTeXMk")
                    ("Glossaries" "makeglossaries %(d-dir) %s" TeX-run-command nil (plain-TeX-mode LaTeX-mode docTeX-mode AmSTeX-mode Texinfo-mode) :help "Run makeglossaries to create glossary file") ("Index" "makeindex %(O?idx)" TeX-run-index nil (plain-TeX-mode LaTeX-mode docTeX-mode AmSTeX-mode Texinfo-mode) :help "Run makeindex to create index file")
                    ("upMendex" "upmendex %(O?idx)" TeX-run-index t (plain-TeX-mode LaTeX-mode docTeX-mode AmSTeX-mode Texinfo-mode) :help "Run upmendex to create index file") ("Xindy" "texindy %s" TeX-run-command nil (plain-TeX-mode LaTeX-mode docTeX-mode AmSTeX-mode Texinfo-mode) :help "Run xindy to create index file")
                    ("Check" "lacheck %s" TeX-run-compile nil (LaTeX-mode) :help "Check LaTeX file for correctness") ("ChkTeX" "chktex -v6 %s" TeX-run-compile nil (LaTeX-mode) :help "Check LaTeX file for common mistakes") ("Spell" "(TeX-ispell-document \"\")" TeX-run-function nil t :help "Spell-check the document")
                    ("Clean" "TeX-clean" TeX-run-function nil t :help "Delete generated intermediate files") ("Clean All" "(TeX-clean t)" TeX-run-function nil t :help "Delete generated intermediate and output files") ("Other" "" TeX-run-command t t :help "Run an arbitrary command"))
 )

[tex-previous-error.patch (text/x-patch, attachment)]

Information forwarded to bug-auctex <at> gnu.org:
bug#79037; Package auctex. (Fri, 18 Jul 2025 09:16:02 GMT) Full text and rfc822 format available.

Message #8 received at 79037 <at> debbugs.gnu.org (full text, mbox):

From: Arash Esbati <arash <at> gnu.org>
To: bram.adams <at> queensu.ca
Cc: 79037 <at> debbugs.gnu.org
Subject: Re: bug#79037: 14.0.9; Fixing infinite loop with `TeX-previous-error'
Date: Fri, 18 Jul 2025 11:15:43 +0200
Hi Bram,

bram.adams <at> queensu.ca writes:

> When `TeX-debug-warnings' and `TeX-suppress-ignored-warnings' are
> enabled, invoking `TeX-previous-error' can lead to an infinite loop in
> `TeX-parse-TeX'. As the `unless' condition always fails, `arg' is
> never incremented to 0, hence the value of `TeX-error-last-visited'
> decrements forever. There are no issues when invoking
> `TeX-next-error'.
>
> The attached patch seems to fix this bug with `TeX-previous-error'.
> [...]
> diff --git a/tex.el b/tex.el
> index 5a3345a..8f00bbc 100644
> --- a/tex.el
> +++ b/tex.el
> @@ -9491,13 +9491,16 @@ already in an Emacs buffer) and the cursor is placed at the error."
>                        (1- TeX-error-last-visited))
>                      item (nth TeX-error-last-visited TeX-error-list))
>                ;; Increase or decrease `arg' only if the warning isn't to be
> -              ;; skipped.
> -              (unless (TeX-error-list-skip-warning-p (nth 0 item) (nth 10 item))
> -                ;; Note: `signum' is a function from `cl' library, do not be
> -                ;; tempted to use it.
> -                (setq arg (if (> arg 0)
> -                              (1- arg)
> -                            (1+ arg)))))
> +              ;; skipped, or `TeX-error-last-visited' has dropped below 0
> +              ;; with a negative `arg'.
> +              (if (or (and (< arg 0)
> +                           (< TeX-error-last-visited 0))
> +                      (not (TeX-error-list-skip-warning-p (nth 0 item) (nth 10 item))))
> +                  ;; Note: `signum' is a function from `cl' library, do not be
> +                  ;; tempted to use it.
> +                  (setq arg (if (> arg 0)
> +                                (1- arg)
> +                              (1+ arg)))))
>              (if (< TeX-error-last-visited -1)
>                  (setq TeX-error-last-visited -1))
>              (cond ((or (null item)

Thanks for the report and the patch.  Is it possible for you to assemble
a small .tex file and an exact recipe how to trigger the inf-loop with
that .tex file?  I trust your analysis is correct, but like to
understand it better before installing it.  TIA.

Best, Arash




This bug report was last modified today.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.