unofficial mirror of bug-gnu-emacs@gnu.org 
 help / color / mirror / code / Atom feed
* bug#53343: 29.0.50; assertion failure in diff--iterate-hunks
@ 2022-01-18 11:02 Stephen Berman
  2022-01-18 12:20 ` Stephen Berman
  0 siblings, 1 reply; 5+ messages in thread
From: Stephen Berman @ 2022-01-18 11:02 UTC (permalink / raw)
  To: 53343

Trying to view in Gnus an attached and buttonized diff in a certain
article raises an assertion failure.  To reproduce:

0. emacs -Q
1. M-x gnus
2. Type `y' at prompt
3. Type `B RET news.gmane.io RET'
4. Type `C-s gmane.emacs.bugs RET RET'
5. Type `1 RET' at prompt
6. Type `j' and enter `<87fspm0z47.fsf@stranik.org> RET' at the prompt
7. Click on the Options menu and check "Enter Debugger on Error"
8. Type `2 b'
=>
Debugger entered--Lisp error: (cl-assertion-failed ((looking-at diff-hunk-header-re) nil))
  cl--assertion-failed((looking-at diff-hunk-header-re))
  diff--iterate-hunks(975 #f(compiled-function (beg end) #<bytecode 0x55bd99118e1ddef>))
  diff--font-lock-syntax(975)
  font-lock-fontify-keywords-region(1 975 nil)
  font-lock-default-fontify-region(1 975 nil)
  font-lock-fontify-region(1 975)
  #f(compiled-function (beg end) #<bytecode -0x177a72732a745bc7>)(1 975)
  font-lock-ensure()
  mm-display-inline-fontify((#<buffer  *mm*-927541> ("text/x-diff") nil nil ("attachment" (filename . "ebrowse-emacs-27.2-fix.diff")) nil nil nil) diff-mode)
  mm-display-patch-inline((#<buffer  *mm*-927541> ("text/x-diff") nil nil ("attachment" (filename . "ebrowse-emacs-27.2-fix.diff")) nil nil nil))
  mm-display-inline((#<buffer  *mm*-927541> ("text/x-diff") nil nil ("attachment" (filename . "ebrowse-emacs-27.2-fix.diff")) nil nil nil))
  gnus-mm-display-part((#<buffer  *mm*-927541> ("text/x-diff") nil nil ("attachment" (filename . "ebrowse-emacs-27.2-fix.diff")) nil nil nil))
  gnus-article-view-part(2)
  funcall-interactively(gnus-article-view-part 2)
  call-interactively(gnus-article-view-part nil nil)
  command-execute(gnus-article-view-part)

The assertion fails when point is at the beginning of the last line in
the following excerpt from the diff (in buffer " *temp*")

  *** /var/home/janstranik/src/emacs-27.2/lib-src/ebrowse.c~	2021-01-28 11:52:16.000000000 -0600
  --- /var/home/janstranik/src/emacs-27.2/lib-src/ebrowse.c	2021-09-24 09:31:49.136287028 -0500
  ***************
  *** 1924,1931 ****

This happens because diff-beginning-of-hunk calls re-search-forward on
diff-hunk-header-re, which puts point at the end the line "*** 1924,1931
****" and then calls (forward-line 0), putting point at the beginning of
that line.  But then (looking-at diff-hunk-header-re) returns nil,
raising the assertion in diff--iterate-hunks.  Replacing (forward-line
0) in diff-beginning-of-hunk with (forward-line -1) makes the assertion
succeed.

I'm not sure if this is a bug or if the diff is malformed.  But evidence
that the diff is not malformed is that if the diff in the article is
saved to a file (by typing `2 K o' in the *Summary* buffer), then
visiting that file in diff-mode with -Q does not raise an assertion
failure.


In GNU Emacs 29.0.50 (build 1, x86_64-pc-linux-gnu, GTK+ Version 3.24.31, cairo version 1.17.4)
 of 2022-01-18 built on strobelfs2
Repository revision: 68472c12e7acdb6e9f55a10eecf02a4ace26465a
Repository branch: master
Windowing system distributor 'The X.Org Foundation', version 11.0.12101003
System Description: Linux From Scratch r11.0-115

Configured using:
 'configure --with-xwidgets 'CFLAGS=-Og -g3'
 PKG_CONFIG_PATH=/opt/qt5/lib/pkgconfig'

Configured features:
ACL CAIRO DBUS FREETYPE GIF GLIB GMP GNUTLS GPM GSETTINGS HARFBUZZ JPEG
JSON LCMS2 LIBSYSTEMD LIBXML2 MODULES NOTIFY INOTIFY PDUMPER PNG RSVG
SECCOMP SOUND SQLITE3 THREADS TIFF TOOLKIT_SCROLL_BARS WEBP X11 XDBE XIM
XPM XWIDGETS GTK3 ZLIB





^ permalink raw reply	[flat|nested] 5+ messages in thread

* bug#53343: 29.0.50; assertion failure in diff--iterate-hunks
  2022-01-18 11:02 bug#53343: 29.0.50; assertion failure in diff--iterate-hunks Stephen Berman
@ 2022-01-18 12:20 ` Stephen Berman
  2022-01-21 11:07   ` Lars Ingebrigtsen
  0 siblings, 1 reply; 5+ messages in thread
From: Stephen Berman @ 2022-01-18 12:20 UTC (permalink / raw)
  To: 53343

On Tue, 18 Jan 2022 12:02:17 +0100 Stephen Berman <stephen.berman@gmx.net> wrote:

> Trying to view in Gnus an attached and buttonized diff in a certain
> article raises an assertion failure.  To reproduce:
>
> 0. emacs -Q
> 1. M-x gnus
> 2. Type `y' at prompt
> 3. Type `B RET news.gmane.io RET'
> 4. Type `C-s gmane.emacs.bugs RET RET'
> 5. Type `1 RET' at prompt
> 6. Type `j' and enter `<87fspm0z47.fsf@stranik.org> RET' at the prompt
> 7. Click on the Options menu and check "Enter Debugger on Error"
> 8. Type `2 b'
> =>
> Debugger entered--Lisp error: (cl-assertion-failed ((looking-at diff-hunk-header-re) nil))
[...]
> The assertion fails when point is at the beginning of the last line in
> the following excerpt from the diff (in buffer " *temp*")
>
>   *** /var/home/janstranik/src/emacs-27.2/lib-src/ebrowse.c~	2021-01-28 11:52:16.000000000 -0600
>   --- /var/home/janstranik/src/emacs-27.2/lib-src/ebrowse.c	2021-09-24 09:31:49.136287028 -0500
>   ***************
>   *** 1924,1931 ****
>
> This happens because diff-beginning-of-hunk calls re-search-forward on
> diff-hunk-header-re, which puts point at the end the line "*** 1924,1931
> ****" and then calls (forward-line 0), putting point at the beginning of
> that line.  But then (looking-at diff-hunk-header-re) returns nil,
> raising the assertion in diff--iterate-hunks.  Replacing (forward-line
> 0) in diff-beginning-of-hunk with (forward-line -1) makes the assertion
> succeed.
>
> I'm not sure if this is a bug or if the diff is malformed.  But evidence
> that the diff is not malformed is that if the diff in the article is
> saved to a file (by typing `2 K o' in the *Summary* buffer), then
> visiting that file in diff-mode with -Q does not raise an assertion
> failure.

On the other hand, I get the assertion failure with the above recipe in
emacs-28 and emacs-27, and it seems unlikely that such a bug in
diff-mode would have gone unnoticed till now, so maybe the diff is
malformed.  (Though if so, why does the failure not happen when visiting
the file containing the diff?)

Steve Berman





^ permalink raw reply	[flat|nested] 5+ messages in thread

* bug#53343: 29.0.50; assertion failure in diff--iterate-hunks
  2022-01-18 12:20 ` Stephen Berman
@ 2022-01-21 11:07   ` Lars Ingebrigtsen
  2022-01-21 13:29     ` Stephen Berman
  0 siblings, 1 reply; 5+ messages in thread
From: Lars Ingebrigtsen @ 2022-01-21 11:07 UTC (permalink / raw)
  To: Stephen Berman; +Cc: 53343

Stephen Berman <stephen.berman@gmx.net> writes:

> On the other hand, I get the assertion failure with the above recipe in
> emacs-28 and emacs-27, and it seems unlikely that such a bug in
> diff-mode would have gone unnoticed till now, so maybe the diff is
> malformed.  (Though if so, why does the failure not happen when visiting
> the file containing the diff?)

I tried

(setq debug-on-error t)

put the diff in a file, and got a backtrace when loading it.

Debugger entered--Lisp error: (error "Unknown diff hunk type")
  signal(error ("Unknown diff hunk type"))
  error("Unknown diff hunk type")
  diff-hunk-text("" nil nil)
  diff-syntax-fontify-hunk(506 506 t)
etc

So I've now made that function less assertative, and that fixes this
issue.

-- 
(domestic pets only, the antidote for overdose, milk.)
   bloggy blog: http://lars.ingebrigtsen.no





^ permalink raw reply	[flat|nested] 5+ messages in thread

* bug#53343: 29.0.50; assertion failure in diff--iterate-hunks
  2022-01-21 11:07   ` Lars Ingebrigtsen
@ 2022-01-21 13:29     ` Stephen Berman
  2022-01-21 13:31       ` Lars Ingebrigtsen
  0 siblings, 1 reply; 5+ messages in thread
From: Stephen Berman @ 2022-01-21 13:29 UTC (permalink / raw)
  To: Lars Ingebrigtsen; +Cc: 53343

On Fri, 21 Jan 2022 12:07:49 +0100 Lars Ingebrigtsen <larsi@gnus.org> wrote:

> Stephen Berman <stephen.berman@gmx.net> writes:
>
>> On the other hand, I get the assertion failure with the above recipe in
>> emacs-28 and emacs-27, and it seems unlikely that such a bug in
>> diff-mode would have gone unnoticed till now, so maybe the diff is
>> malformed.  (Though if so, why does the failure not happen when visiting
>> the file containing the diff?)
>
> I tried
>
> (setq debug-on-error t)
>
> put the diff in a file, and got a backtrace when loading it.
>
> Debugger entered--Lisp error: (error "Unknown diff hunk type")
>   signal(error ("Unknown diff hunk type"))
>   error("Unknown diff hunk type")
>   diff-hunk-text("" nil nil)
>   diff-syntax-fontify-hunk(506 506 t)
> etc

Yes, I get this too.  I must have mistested that before.

> So I've now made that function less assertative, and that fixes this
> issue.

Thanks, and I confirm your fix avoids the error.  However, you added
this to the doc string of `diff-ignore-whitespace-hunk': "If
INHIBIT-ERROR, ignore malformed hunks."  But you didn't add an
INHIBIT-ERROR argument.

Steve Berman





^ permalink raw reply	[flat|nested] 5+ messages in thread

* bug#53343: 29.0.50; assertion failure in diff--iterate-hunks
  2022-01-21 13:29     ` Stephen Berman
@ 2022-01-21 13:31       ` Lars Ingebrigtsen
  0 siblings, 0 replies; 5+ messages in thread
From: Lars Ingebrigtsen @ 2022-01-21 13:31 UTC (permalink / raw)
  To: Stephen Berman; +Cc: 53343

Stephen Berman <stephen.berman@gmx.net> writes:

> Thanks, and I confirm your fix avoids the error.  However, you added
> this to the doc string of `diff-ignore-whitespace-hunk': "If
> INHIBIT-ERROR, ignore malformed hunks."  But you didn't add an
> INHIBIT-ERROR argument.

😀  Forgot to remove that after deciding that I didn't need to add any
arguments after all.  Now fixed.

-- 
(domestic pets only, the antidote for overdose, milk.)
   bloggy blog: http://lars.ingebrigtsen.no





^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2022-01-21 13:31 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-01-18 11:02 bug#53343: 29.0.50; assertion failure in diff--iterate-hunks Stephen Berman
2022-01-18 12:20 ` Stephen Berman
2022-01-21 11:07   ` Lars Ingebrigtsen
2022-01-21 13:29     ` Stephen Berman
2022-01-21 13:31       ` Lars Ingebrigtsen

Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).