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
bug-auctex <at> gnu.org
:bug#79037
; Package auctex
.
(Thu, 17 Jul 2025 11:06:02 GMT) Full text and rfc822 format available.bram.adams <at> queensu.ca
: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)]
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
bug-auctex <at> gnu.org
:bug#79037
; Package auctex
.
(Fri, 18 Jul 2025 18:00:02 GMT) Full text and rfc822 format available.Message #11 received at 79037 <at> debbugs.gnu.org (full text, mbox):
From: bram.adams <at> queensu.ca To: Arash Esbati <arash <at> gnu.org> 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 10:19:43 -0400
[Message part 1 (text/plain, inline)]
Hi Arash, Thanks for the follow-up, I've attached a minimal latex example that contains: - an ignored warning (about a package's options) - a non-ignored warning (missing citation label) After compiling, the infinite loop is triggered when invoking `TeX-previous-error' after invoking `TeX-next-error'. These are the relevant configuration options: == (setq TeX-debug-warnings t TeX-ignore-warnings #'my-ignore-TeX-warnings TeX-suppress-ignored-warnings t) (defun my-ignore-TeX-warnings (type file line text &rest more) (let ((ref "LaTeX Warning: Reference") (cit "LaTeX Warning: Citation")) (and (not (string-match-p ref text)) (not (string-match-p cit text))))) == Kind regards, Bram Adams
[bla.tex (application/x-tex, attachment)]
[Message part 3 (text/plain, inline)]
Arash Esbati <arash <at> gnu.org> writes: > [You don't often get email from arash <at> gnu.org. Learn why this is important at https://aka.ms/LearnAboutSenderIdentification ] > > 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
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.