From: Gregory Heytings <gregory@heytings.org>
To: Eli Zaretskii <eliz@gnu.org>
Cc: "Gerd Möllmann" <gerd.moellmann@gmail.com>,
larsi@gnus.org, 56393@debbugs.gnu.org
Subject: bug#56393: Actually fix the long lines display bug
Date: Mon, 18 Jul 2022 12:58:59 +0000 [thread overview]
Message-ID: <fa7b8ced35980a816cce@heytings.org> (raw)
In-Reply-To: <83h73epq7v.fsf@gnu.org>
>
> Thanks. The crash is gone, of course,
>
That's good news.
>
> I can send you a backtrace from yesterday:
>
> [...]
>
> As you see, the cause of problem was the same one:
>
> [...]
>
> Since you have now moved the iteration to begin at the "narrowed" BEGV,
> this crash is also gone.
>
That's good news, too. Thanks for the other backtrace.
>
> To tell the truth, I'm not sure this kind of fix is the correct
> solution, because basically its success is a matter of luck (or lack
> thereof). For example, recall the higher-level context of the first
> segfault:
>
> [...]
>
> This is isearch.el trying to establish whether the position of the match
> is visible in the window. To do that, it starts from the current
> window-start position (which happens to be 1), and simulates display of
> the buffer text portion up until point or until the end of window,
> whichever comes first, to determine whether point is beyond the end of
> the window. Your change makes the search start from some much later
> position instead, which could very well produce incorrect results:
> pos-visible-in-window-p could decide that point _is_ visible, when it
> really isn't. (It doesn't happen in this particular case because the
> newline is far away -- at the very end of the buffer -- so it isn't
> visible in both cases. But that's sheer luck.)
>
Well, this happens only in buffers with long lines, and only when we are
inside a long line, so from my point of view it works as expected, and
moreover the risk is small. Would the following be better from your point
of view?
diff --git a/src/xdisp.c b/src/xdisp.c
index d69d7440bc..572ad2b854 100644
--- a/src/xdisp.c
+++ b/src/xdisp.c
@@ -8668,18 +8668,11 @@ get_visually_first_element (struct it *it)
bool string_p = STRINGP (it->string) || it->s;
ptrdiff_t eob = (string_p ? it->bidi_it.string.schars : ZV);
ptrdiff_t bob;
+ ptrdiff_t obegv = BEGV;
- SET_WITH_NARROWED_BEGV (it, bob, string_p ? 0 : BEGV);
-
- /* Reseat again when, as a consequence of the SET_WITH_NARROWED_BEGV
- above, the iterator is before bob. */
- if (!string_p && IT_CHARPOS (*it) < bob)
- {
- struct text_pos pos;
- pos.charpos = bob;
- pos.bytepos = CHAR_TO_BYTE (bob);
- reseat (it, pos, true);
- }
+ SET_WITH_NARROWED_BEGV (it, bob,
+ string_p ? 0 :
+ IT_BYTEPOS (*it) < BEGV ? obegv : BEGV);
if (STRINGP (it->string))
{
>
> More generally, if you look at redisplay_window, you will see that about
> 2/3 of its code tries very hard to reuse the previous window-start
> position, before it gives up and looks for a new starting position. So
> in any situation where the previous window-start is far enough before
> point, all that code will basically work with a buffer position that is
> at risk of being before the "narrowed" BEGV. Thus, any code there which
> tries stuff like start_display+move_it_to will risk hitting this kind of
> problems -- either FETCH_BYTE will crash, or we risk producing the wrong
> result because we force the code to jump to the "narrowed" BEGV before
> doing anything, while its caller expects results relative to a different
> position.
>
I understand. But note that temporarily narrowing the buffer happens only
at a few well-chosen places, which are situated rather low in the
abstraction layers, so the effect on other parts of the code is nil.
>
> I think this is because the display engine assumes that BEGV stays put
> during the entire redisplay_window lifetime, i.e. that all of the
> subroutines it calls see the same value of BEGV. This is no longer so
> on the branch, and I wonder whether and how we should handle this new
> situation to keep the display code stable and reliable.
>
I don't know.
next prev parent reply other threads:[~2022-07-18 12:58 UTC|newest]
Thread overview: 205+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-07-05 8:49 bug#56393: Actually fix the long lines display bug Gregory Heytings
2022-07-05 9:28 ` Gregory Heytings
2022-07-05 9:58 ` Po Lu via Bug reports for GNU Emacs, the Swiss army knife of text editors
2022-07-05 10:17 ` Gregory Heytings
2022-07-05 11:24 ` Lars Ingebrigtsen
2022-07-05 12:16 ` Gregory Heytings
2022-07-05 12:59 ` Gerd Möllmann
2022-07-07 11:29 ` Gerd Möllmann
2022-07-07 13:36 ` Eli Zaretskii
2022-07-07 14:10 ` Eli Zaretskii
2022-07-08 5:49 ` Gerd Möllmann
2022-07-08 6:55 ` Eli Zaretskii
2022-07-08 7:01 ` Gerd Möllmann
2022-07-08 21:41 ` Gregory Heytings
2022-07-09 7:03 ` Eli Zaretskii
2022-07-09 8:56 ` Gregory Heytings
2022-07-09 9:20 ` Eli Zaretskii
2022-07-09 9:23 ` Eli Zaretskii
2022-07-09 9:32 ` Gregory Heytings
2022-07-09 9:30 ` Eli Zaretskii
2022-07-09 9:49 ` Gregory Heytings
2022-07-09 10:01 ` Eli Zaretskii
2022-07-09 10:50 ` Gregory Heytings
2022-07-09 11:16 ` Eli Zaretskii
2022-07-09 11:48 ` Gregory Heytings
2022-07-09 11:59 ` Eli Zaretskii
2022-07-09 12:07 ` Gregory Heytings
2022-07-09 12:34 ` Eli Zaretskii
2022-07-09 12:36 ` Gregory Heytings
2022-07-09 12:09 ` Ihor Radchenko
2022-07-09 12:37 ` Eli Zaretskii
2022-07-09 10:54 ` Eli Zaretskii
2022-07-09 11:09 ` Eli Zaretskii
2022-07-09 11:12 ` Gregory Heytings
2022-07-09 11:20 ` Gregory Heytings
2022-07-09 12:29 ` Lars Ingebrigtsen
2022-07-09 12:38 ` Gregory Heytings
2022-07-16 19:39 ` Gregory Heytings
2022-07-17 15:21 ` Eli Zaretskii
2022-07-17 15:37 ` Gregory Heytings
2022-07-17 16:00 ` Eli Zaretskii
2022-07-18 10:19 ` Gregory Heytings
2022-07-18 12:20 ` Eli Zaretskii
2022-07-18 12:58 ` Gregory Heytings [this message]
2022-07-18 13:33 ` Eli Zaretskii
2022-07-18 14:00 ` Gregory Heytings
2022-07-18 14:10 ` Gregory Heytings
2022-07-18 14:22 ` Eli Zaretskii
2022-07-18 14:34 ` Gregory Heytings
2022-07-18 16:06 ` Gregory Heytings
2022-07-18 16:21 ` Gregory Heytings
2022-07-18 17:04 ` Eli Zaretskii
2022-07-18 17:07 ` Gregory Heytings
2022-07-18 17:09 ` Eli Zaretskii
2022-07-18 18:33 ` Gregory Heytings
2022-07-18 16:48 ` Eli Zaretskii
2022-07-18 17:11 ` Gregory Heytings
2022-07-18 17:19 ` Eli Zaretskii
2022-07-18 18:17 ` Gregory Heytings
2022-07-18 18:26 ` Gregory Heytings
2022-07-18 18:56 ` Eli Zaretskii
2022-07-18 20:14 ` Gregory Heytings
2022-07-19 2:34 ` Eli Zaretskii
2022-07-19 5:39 ` Gregory Heytings
2022-07-19 12:00 ` Eli Zaretskii
2022-07-19 12:07 ` Gerd Möllmann
2022-07-19 12:49 ` Gregory Heytings
2022-07-19 13:16 ` Eli Zaretskii
2022-07-19 13:42 ` Gregory Heytings
2022-07-19 13:56 ` Eli Zaretskii
2022-07-19 14:06 ` Gregory Heytings
2022-07-19 14:15 ` Lars Ingebrigtsen
2022-07-19 14:24 ` Gregory Heytings
[not found] ` <364167b2-83e-c5af-1981-221d53e33ce6@heytings.org>
2022-07-19 21:55 ` Gregory Heytings
2022-07-19 14:19 ` Eli Zaretskii
2022-07-19 14:33 ` Gregory Heytings
2022-07-19 16:14 ` Eli Zaretskii
2022-07-19 21:40 ` Gregory Heytings
2022-07-20 12:07 ` Eli Zaretskii
2022-07-20 13:06 ` Gregory Heytings
2022-07-20 13:23 ` Eli Zaretskii
2022-07-20 13:42 ` Gregory Heytings
2022-07-20 15:54 ` Eli Zaretskii
2022-07-20 17:33 ` Gregory Heytings
2022-07-21 6:32 ` Eli Zaretskii
2022-07-21 7:39 ` Gregory Heytings
2022-07-21 7:49 ` Gregory Heytings
2022-07-21 8:00 ` Eli Zaretskii
2022-07-21 7:56 ` Eli Zaretskii
2022-07-21 8:20 ` Gregory Heytings
2022-07-21 8:58 ` Eli Zaretskii
2022-07-21 9:00 ` Gregory Heytings
2022-07-21 9:18 ` Lars Ingebrigtsen
2022-07-21 11:56 ` Gregory Heytings
2022-07-21 12:22 ` Eli Zaretskii
[not found] ` <bce7aad8-6872-97ec-77ac-6a593ff66a27@heytings.org>
2022-07-19 12:57 ` Gregory Heytings
2022-07-21 9:42 ` Eli Zaretskii
2022-07-08 5:47 ` Gerd Möllmann
2022-07-08 5:56 ` Eli Zaretskii
2022-07-08 6:25 ` Gerd Möllmann
2022-07-08 7:19 ` Eli Zaretskii
2022-07-07 18:38 ` Gregory Heytings
2022-07-08 5:59 ` Gerd Möllmann
2022-07-05 12:54 ` Eli Zaretskii
2022-07-05 13:53 ` Gregory Heytings
2022-07-05 14:14 ` Eli Zaretskii
2022-07-05 14:30 ` Gregory Heytings
2022-07-05 15:21 ` Robert Pluim
2022-07-05 15:46 ` Eli Zaretskii
2022-07-05 16:21 ` Gregory Heytings
2022-07-05 16:34 ` Eli Zaretskii
2022-07-05 23:09 ` Lars Ingebrigtsen
2022-07-05 23:12 ` Gregory Heytings
2022-07-06 12:29 ` Eli Zaretskii
2022-07-06 13:01 ` Gregory Heytings
2022-07-06 13:25 ` Eli Zaretskii
2022-07-06 13:56 ` Gregory Heytings
2022-07-06 14:09 ` Eli Zaretskii
2022-07-06 14:41 ` Gregory Heytings
2022-07-06 16:19 ` Eli Zaretskii
2022-07-06 16:57 ` Gregory Heytings
2022-07-06 17:50 ` Eli Zaretskii
2022-07-07 0:28 ` Ihor Radchenko
2022-07-07 5:43 ` Eli Zaretskii
2022-07-07 0:38 ` Gregory Heytings
2022-07-07 5:53 ` Eli Zaretskii
2022-07-07 8:23 ` Gregory Heytings
2022-07-07 10:10 ` Eli Zaretskii
2022-07-07 18:08 ` Gregory Heytings
2022-07-09 6:20 ` Eli Zaretskii
2022-07-09 8:24 ` Gregory Heytings
2022-07-09 9:13 ` Eli Zaretskii
2022-07-09 9:39 ` Gregory Heytings
2022-07-09 9:59 ` Eli Zaretskii
2022-07-09 10:20 ` Gregory Heytings
2022-07-09 10:41 ` Eli Zaretskii
2022-07-09 11:09 ` Gregory Heytings
2022-07-09 11:18 ` Eli Zaretskii
2022-07-09 11:38 ` Gregory Heytings
2022-07-09 11:48 ` Eli Zaretskii
2022-07-09 12:01 ` Gregory Heytings
2022-07-09 12:24 ` Eli Zaretskii
2022-07-09 12:31 ` Gregory Heytings
2022-07-07 14:25 ` Drew Adams
2022-07-07 15:58 ` Eli Zaretskii
2022-07-07 17:50 ` Eli Zaretskii
2022-07-07 18:46 ` Gregory Heytings
2022-07-07 19:05 ` Eli Zaretskii
2022-07-07 18:49 ` Gregory Heytings
2022-07-06 13:34 ` Stefan Kangas
2022-07-06 14:10 ` Gregory Heytings
2022-07-06 14:37 ` Stefan Kangas
2022-07-06 14:47 ` Gregory Heytings
2022-07-06 15:03 ` Stefan Kangas
2022-07-06 15:31 ` Gregory Heytings
2022-07-06 15:50 ` Eli Zaretskii
2022-07-05 23:10 ` Gregory Heytings
2022-07-06 9:49 ` Gerd Möllmann
2022-07-06 10:21 ` Gregory Heytings
2022-07-06 11:31 ` Lars Ingebrigtsen
2022-07-06 12:13 ` Gregory Heytings
2022-07-06 12:44 ` Gregory Heytings
2022-07-07 7:48 ` Lars Ingebrigtsen
2022-07-06 12:50 ` Eli Zaretskii
2022-07-06 13:16 ` Phil Sainty
2022-07-06 13:45 ` Gregory Heytings
2022-07-06 14:05 ` Phil Sainty
2022-07-06 12:39 ` Eli Zaretskii
2022-07-06 13:06 ` Gregory Heytings
2022-07-06 13:32 ` Eli Zaretskii
2022-07-06 14:05 ` Gregory Heytings
2022-07-06 14:13 ` Eli Zaretskii
2022-07-06 14:27 ` Gregory Heytings
2022-07-06 16:53 ` Eli Zaretskii
2022-07-06 17:17 ` Gregory Heytings
2022-07-06 17:30 ` Eli Zaretskii
2022-07-06 21:53 ` Gregory Heytings
2022-07-07 7:47 ` Lars Ingebrigtsen
2022-07-18 9:44 ` bug#56393: Soon also looking at your branch Gerd Möllmann
2022-07-18 10:11 ` Michael Albinus
2022-07-18 10:26 ` Gerd Möllmann
2022-07-18 11:43 ` Michael Albinus
2022-07-18 12:15 ` Gerd Möllmann
2022-07-18 12:19 ` Michael Albinus
2022-07-18 10:49 ` Gregory Heytings
2022-07-19 8:21 ` bug#56393: Actually fix the long lines display bug Gerd Möllmann
2022-07-19 8:53 ` Gregory Heytings
2022-07-19 8:58 ` Gregory Heytings
2022-07-19 9:31 ` bug#56393: Resetting long_line_optimization_p to 0 Gerd Möllmann
2022-07-19 9:51 ` Gregory Heytings
2022-07-19 11:20 ` Gerd Möllmann
2022-07-20 6:58 ` bug#56393: Actually fix the long lines display bug Gerd Möllmann
2022-07-20 9:13 ` Gregory Heytings
2022-07-19 12:21 ` Eli Zaretskii
2022-07-19 9:17 ` bug#56393: Auto narrowing autside of redisplay Gerd Möllmann
2022-07-19 9:51 ` Gregory Heytings
2022-07-19 10:56 ` bug#56393: Actually fix the long lines display bug Gerd Möllmann
2022-07-19 9:25 ` bug#56393: Turn on narrowing in redisplay_window Gerd Möllmann
2022-07-19 9:52 ` Gregory Heytings
2022-07-19 11:26 ` Gerd Möllmann
2022-07-19 12:43 ` Eli Zaretskii
2022-07-20 6:30 ` bug#56393: Actually fix the long lines display bug Gerd Möllmann
2022-07-20 9:08 ` Gregory Heytings
2022-07-19 12:48 ` Eli Zaretskii
2022-07-20 6:32 ` Gerd Möllmann
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
List information: https://www.gnu.org/software/emacs/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=fa7b8ced35980a816cce@heytings.org \
--to=gregory@heytings.org \
--cc=56393@debbugs.gnu.org \
--cc=eliz@gnu.org \
--cc=gerd.moellmann@gmail.com \
--cc=larsi@gnus.org \
/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 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).