GNU bug report logs - #79509
30.1; shr throws error on <sub> inside <a>

Previous Next

Package: emacs;

Reported by: Zaz Brown <zazbrown <at> zazbrown.com>

Date: Thu, 25 Sep 2025 12:30:03 UTC

Severity: normal

Found in version 30.1

Done: Eli Zaretskii <eliz <at> gnu.org>

To reply to this bug, email your comments to 79509 AT debbugs.gnu.org.
There is no need to reopen the bug first.

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-gnu-emacs <at> gnu.org:
bug#79509; Package emacs. (Thu, 25 Sep 2025 12:30:03 GMT) Full text and rfc822 format available.

Acknowledgement sent to Zaz Brown <zazbrown <at> zazbrown.com>:
New bug report received and forwarded. Copy sent to bug-gnu-emacs <at> gnu.org. (Thu, 25 Sep 2025 12:30:03 GMT) Full text and rfc822 format available.

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

From: Zaz Brown <zazbrown <at> zazbrown.com>
To: bug-gnu-emacs <at> gnu.org
Subject: 30.1; shr throws error on <sub> inside <a>
Date: Thu, 25 Sep 2025 12:28:17 +0000
shr throws an error if there's a <sub> tag inside an <a> tag. E.g.:

<html>
  <body>
    <p>
      <a href="http://example.com">
        <sub>
          test
        </sub>
      </a>
    </p>
  </body>
</html>

Debugger entered--Lisp error: (beginning-of-buffer)
  shr-tag-sub((sub nil "test"))
  shr-descend((sub nil "test"))
  shr-tag-a((a ((href . "http://example.com")) (sub nil "test")))
  shr-descend((a ((href . "http://example.com")) (sub nil "test")))
  shr-tag-p((p nil (a ((href . "http://example.com")) (sub nil "test"))))
  shr-descend((p nil (a ((href . "http://example.com")) (sub nil "test"))))
  shr-tag-body((body nil (p nil (a ((href . "http://example.com")) (sub nil "test")))))
  shr-descend((body nil (p nil (a ((href . "http://example.com")) (sub nil "test")))))
  shr-tag-html((html nil (body nil (p nil (a ((href . "http://example.com")) (sub nil "test"))))))
  shr-descend((html nil (body nil (p nil (a ((href . "http://example.com")) (sub nil "test"))))))
  shr-insert-document((html nil (body nil (p nil (a ((href . "http://example.com")) (sub nil "test"))))))
  (let ((dom (libxml-parse-html-region (point-min) (point-max)))) (erase-buffer) (shr-insert-document dom) (buffer-string))
  (progn (insert html) (let ((dom (libxml-parse-html-region (point-min) (point-max)))) (erase-buffer) (shr-insert-document dom) (buffer-string)))
  (unwind-protect (progn (insert html) (let ((dom (libxml-parse-html-region (point-min) (point-max)))) (erase-buffer) (shr-insert-document dom) (buffer-string))) (and (buffer-name temp-buffer) (kill-buffer temp-buffer)))
  (save-current-buffer (set-buffer temp-buffer) (unwind-protect (progn (insert html) (let ((dom (libxml-parse-html-region (point-min) (point-max)))) (erase-buffer) (shr-insert-document dom) (buffer-string))) (and (buffer-name temp-buffer) (kill-buffer temp-buffer))))
  (let ((temp-buffer (generate-new-buffer " *temp*" t))) (save-current-buffer (set-buffer temp-buffer) (unwind-protect (progn (insert html) (let ((dom (libxml-parse-html-region ... ...))) (erase-buffer) (shr-insert-document dom) (buffer-string))) (and (buffer-name temp-buffer) (kill-buffer temp-buffer)))))
  (let ((html "<p><a href='http://example.com'><sub>test</sub></a></p>")) (let ((temp-buffer (generate-new-buffer " *temp*" t))) (save-current-buffer (set-buffer temp-buffer) (unwind-protect (progn (insert html) (let ((dom ...)) (erase-buffer) (shr-insert-document dom) (buffer-string))) (and (buffer-name temp-buffer) (kill-buffer temp-buffer))))))
  eval((let ((html "<p><a href='http://example.com'><sub>test</sub></a></p>")) (let ((temp-buffer (generate-new-buffer " *temp*" t))) (save-current-buffer (set-buffer temp-buffer) (unwind-protect (progn (insert html) (let (...) (erase-buffer) (shr-insert-document dom) (buffer-string))) (and (buffer-name temp-buffer) (kill-buffer temp-buffer)))))) t)
  #f(compiled-function () #<bytecode -0xe16bf2311add536>)()
  #f(compiled-function () #<bytecode -0x5db3e1955cb81d1>)()
  eval-expression((let ((html "<p><a href='http://example.com'><sub>test</sub></a></p>")) (with-temp-buffer (insert html) (let ((dom (libxml-parse-html-region (point-min) (point-max)))) (erase-buffer) (shr-insert-document dom) (buffer-string)))) nil nil 127)
  funcall-interactively(eval-expression (let ((html "<p><a href='http://example.com'><sub>test</sub></a></p>")) (with-temp-buffer (insert html) (let ((dom (libxml-parse-html-region (point-min) (point-max)))) (erase-buffer) (shr-insert-document dom) (buffer-string)))) nil nil 127)


Downstream mu4e bug: https://github.com/djcb/mu/issues/2874

-- 





Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#79509; Package emacs. (Thu, 25 Sep 2025 15:00:03 GMT) Full text and rfc822 format available.

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

From: Stephen Berman <stephen.berman <at> gmx.net>
To: Zaz Brown via "Bug reports for GNU Emacs, the Swiss army knife of text
 editors" <bug-gnu-emacs <at> gnu.org>
Cc: Zaz Brown <zazbrown <at> zazbrown.com>, 79509 <at> debbugs.gnu.org
Subject: Re: bug#79509: 30.1; shr throws error on <sub> inside <a>
Date: Thu, 25 Sep 2025 16:59:07 +0200
On Thu, 25 Sep 2025 12:28:17 +0000 Zaz Brown via "Bug reports for GNU Emacs, the Swiss army knife of text editors" <bug-gnu-emacs <at> gnu.org> wrote:

> shr throws an error if there's a <sub> tag inside an <a> tag. E.g.:
>
> <html>
>   <body>
>     <p>
>       <a href="http://example.com">
>         <sub>
>           test
>         </sub>
>       </a>
>     </p>
>   </body>
> </html>
>
> Debugger entered--Lisp error: (beginning-of-buffer)
>   shr-tag-sub((sub nil "test"))
[...]

This was recently reported and fixed on master:

commit 04342d365406468b9d82ad81277f20d5bfd0eb4d
Author:     Eli Zaretskii <eliz <at> gnu.org>
Commit:     Eli Zaretskii <eliz <at> gnu.org>
CommitDate: Sun Sep 14 18:24:31 2025 +0300

    * lisp/net/shr.el (shr-tag-sub): Handle BOB (bug#79448).

Steve Berman




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#79509; Package emacs. (Thu, 25 Sep 2025 15:00:04 GMT) Full text and rfc822 format available.

Reply sent to Eli Zaretskii <eliz <at> gnu.org>:
You have taken responsibility. (Sat, 11 Oct 2025 08:20:03 GMT) Full text and rfc822 format available.

Notification sent to Zaz Brown <zazbrown <at> zazbrown.com>:
bug acknowledged by developer. (Sat, 11 Oct 2025 08:20:04 GMT) Full text and rfc822 format available.

Message #16 received at 79509-done <at> debbugs.gnu.org (full text, mbox):

From: Eli Zaretskii <eliz <at> gnu.org>
To: Stephen Berman <stephen.berman <at> gmx.net>
Cc: 79509-done <at> debbugs.gnu.org, zazbrown <at> zazbrown.com
Subject: Re: bug#79509: 30.1; shr throws error on <sub> inside <a>
Date: Sat, 11 Oct 2025 11:19:46 +0300
> Cc: zazbrown <at> zazbrown.com
> Date: Thu, 25 Sep 2025 16:59:07 +0200
> From:  Stephen Berman via "Bug reports for GNU Emacs,
>  the Swiss army knife of text editors" <bug-gnu-emacs <at> gnu.org>
> 
> On Thu, 25 Sep 2025 12:28:17 +0000 Zaz Brown via "Bug reports for GNU Emacs, the Swiss army knife of text editors" <bug-gnu-emacs <at> gnu.org> wrote:
> 
> > shr throws an error if there's a <sub> tag inside an <a> tag. E.g.:
> >
> > <html>
> >   <body>
> >     <p>
> >       <a href="http://example.com">
> >         <sub>
> >           test
> >         </sub>
> >       </a>
> >     </p>
> >   </body>
> > </html>
> >
> > Debugger entered--Lisp error: (beginning-of-buffer)
> >   shr-tag-sub((sub nil "test"))
> [...]
> 
> This was recently reported and fixed on master:
> 
> commit 04342d365406468b9d82ad81277f20d5bfd0eb4d
> Author:     Eli Zaretskii <eliz <at> gnu.org>
> Commit:     Eli Zaretskii <eliz <at> gnu.org>
> CommitDate: Sun Sep 14 18:24:31 2025 +0300
> 
>     * lisp/net/shr.el (shr-tag-sub): Handle BOB (bug#79448).
> 
> Steve Berman

Thanks, I'm therefore closing this bug.




This bug report was last modified 26 days ago.

Previous Next


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