From: Alan Mackenzie <acm@muc.de>
To: Jeff Norden <jnorden@tntech.edu>
Cc: Damien Cassou <damien@cassou.me>, 40317@debbugs.gnu.org
Subject: bug#40317: 27.0.90; Reverting a buffer that visits C file signals an error
Date: Fri, 18 Sep 2020 20:13:35 +0000 [thread overview]
Message-ID: <20200918201335.GE5497@ACM> (raw)
In-Reply-To: <fd7dsr3mms.fsf@norden.tntech.edu>
Hello, Jeff.
Thanks for contributing towards this bug.
On Thu, Sep 17, 2020 at 20:21:47 -0500, Jeff Norden wrote:
> I came across this by searching for args-out-of-range bugs. I recently found
> a bug in forward-comment (which I'll post separately) that was causing
> out-of-range errors for me, and I wondered if forward-comment might be
> relevant to other issues. It isn't in this case, but I think I did find the
> source of the problem.
> The function c-after-change (in cc-mode.el) was changed between 26.3 and 27.1,
> to handle more cases where the before and/or after change functions get called
> multiple times. The function now begins (line numbers are from the current
> master version) with:
> 1993 ;; Note: c-just-done-before-change is nil, t, or 'whole-buffer.
> 1994 (unless (c-called-from-text-property-change-p)
> 1995 (save-restriction
> 1996 (widen)
> 1997 (unless c-just-done-before-change
> 1998 (c-before-change (point-min) (point-max)))
> 1999 (unless (eq c-just-done-before-change t)
> 2000 (setq beg (point-min)
> 2001 end (point-max)
> 2002 old-len (- end beg)
> 2003 c-new-BEG (point-min)
> 2004 c-new-END (point-max)))
> 2005 (setq c-just-done-before-change nil)))
> 2006
> 2007 ;; (c-new-BEG c-new-END) will be the region to fontify. It may become
> 2008 ;; larger than (beg end).
> 2009 (setq c-new-END (- (+ c-new-END (- end beg)) old-len))
> It looks like it is now possible for the last line above, which increments
> c-new-END, to run even if c-new-END has been set to the after-change value
> of point-max. That will make c-new-END point past the end of the buffer.
[ .... ]
> Unfortunately, I can't figure out how to trigger this bug myself. If you want
> to be 100% sure about it, you might try adding
I've spent quite a long time looking at this, trying various means to
trigger the error (via `insert-file-contents' and `revert-buffer').
Then it suddenly dawned on me that the (setq c-new-END (.....)) is OK.
If the body of the the last `unless' has been run, (- end beg) and
old-len are equal to each other, and to the buffer length. So c-new-END
doesn't get changed in this case.
Of course, it's hopelessly confusing coding. It seems to have confused
you, and it certainly confused me, even though I wrote it myself only a
short while ago.
If that code is to remain as it is, it definitely needs commenting.
There seems to be an aesthetic benefit in keeping the (setq c-new-BEG
...) separate from the ~13 line section which deals with the
out-of-sequence calling of before-change-functions and
after-change-functions. But I'll sleep on that thought.
[ .... ]
> Hope this helps,
> -Jeff
Yes, it has helped, thanks.
--
Alan Mackenzie (Nuremberg, Germany).
next prev parent reply other threads:[~2020-09-18 20:13 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-03-29 13:26 bug#40317: 27.0.90; Reverting a buffer that visits C file signals an error Eli Zaretskii
2020-09-16 12:24 ` Damien Cassou
2020-09-16 14:26 ` Eli Zaretskii
2020-09-16 14:51 ` Damien Cassou
2020-09-16 15:09 ` Eli Zaretskii
2020-09-16 18:19 ` Damien Cassou
2020-09-18 1:21 ` Jeff Norden
2020-09-18 19:46 ` Damien Cassou
2020-09-18 20:13 ` Alan Mackenzie [this message]
2020-09-18 22:03 ` Jeff Norden
2020-09-19 7:35 ` Eli Zaretskii
2020-09-19 11:48 ` Alan Mackenzie
2020-09-20 17:25 ` Alan Mackenzie
2020-10-29 14:19 ` Damien Cassou
2022-02-20 15:11 ` Lars Ingebrigtsen
2022-02-21 10:09 ` Damien Cassou
2022-02-21 14:08 ` Lars Ingebrigtsen
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20200918201335.GE5497@ACM \
--to=acm@muc.de \
--cc=40317@debbugs.gnu.org \
--cc=damien@cassou.me \
--cc=jnorden@tntech.edu \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this external index
https://git.savannah.gnu.org/cgit/emacs.git
https://git.savannah.gnu.org/cgit/emacs/org-mode.git
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.