GNU bug report logs - #21200
25.0.50; xdisp.c: infinite loop when using invisibility specs

Previous Next

Package: emacs;

Reported by: Pip Cet <pipcet <at> gmail.com>

Date: Thu, 6 Aug 2015 19:15:02 UTC

Severity: normal

Found in version 25.0.50

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

Bug is archived. No further changes may be made.

Full log


View this message in rfc822 format

From: help-debbugs <at> gnu.org (GNU bug Tracking System)
To: Eli Zaretskii <eliz <at> gnu.org>
Cc: tracker <at> debbugs.gnu.org
Subject: bug#21200: closed (25.0.50; xdisp.c: infinite loop when using
 invisibility specs)
Date: Fri, 07 Aug 2015 13:47:02 +0000
[Message part 1 (text/plain, inline)]
Your message dated Fri, 07 Aug 2015 16:46:27 +0300
with message-id <83y4hnqki4.fsf <at> gnu.org>
and subject line Re: bug#21200: 25.0.50; xdisp.c: infinite loop when using invisibility specs
has caused the debbugs.gnu.org bug report #21200,
regarding 25.0.50; xdisp.c: infinite loop when using invisibility specs
to be marked as done.

(If you believe you have received this mail in error, please contact
help-debbugs <at> gnu.org.)


-- 
21200: http://debbugs.gnu.org/cgi/bugreport.cgi?bug=21200
GNU Bug Tracking System
Contact help-debbugs <at> gnu.org with problems
[Message part 2 (message/rfc822, inline)]
From: Pip Cet <pipcet <at> gmail.com>
To: bug-gnu-emacs <at> gnu.org
Subject: 25.0.50; xdisp.c: infinite loop when using invisibility specs
Date: Thu, 6 Aug 2015 18:26:05 +0000
[Message part 3 (text/plain, inline)]
Hi,
with the current git tree (revision 0aec2aac), I'm running into
problems with an infinite loop in xdisp.c which I believe to be fixed
by this patch, which is reasonably obvious:

diff --git a/src/xdisp.c b/src/xdisp.c
index e45cb87..7b221d4 100644
--- a/src/xdisp.c
+++ b/src/xdisp.c
@@ -4221,6 +4221,8 @@ handle_invisible_prop (struct it *it)
           if (invis == 2)
             display_ellipsis_p = true;
         }
+
+              charpos = end_charpos;
         }
       while (invis != 0 && endpos < len);

in this loop:

      do
        {
          end_charpos = Fnext_single_property_change (charpos, Qinvisible,
                              it->string, limit);
          if (INTEGERP (end_charpos))
        {
          endpos = XFASTINT (end_charpos);
          charpos = end_charpos;
          prop = Fget_text_property (end_charpos, Qinvisible, it->string);
          invis = TEXT_PROP_MEANS_INVISIBLE (prop);
          if (invis == 2)
            display_ellipsis_p = true;
        }
        }
      while (invis != 0 && endpos < len);

Without the patch, we keep calling Fnext_property_change with the same
arguments and expecting a different result, which obviously never
happens. In fact it seems to me we only need one of charpos and
end_charpos as the code currently stands, anyway. However, charpos =
f(..., charpos, ...) might cause confusion.

I can provide more detail if necessary, but as I said, it's a fairly
obvious bug.
[emacs-006.diff (text/plain, attachment)]
[Message part 5 (message/rfc822, inline)]
From: Eli Zaretskii <eliz <at> gnu.org>
To: Pip Cet <pipcet <at> gmail.com>
Cc: 21200-done <at> debbugs.gnu.org
Subject: Re: bug#21200: 25.0.50;
 xdisp.c: infinite loop when using invisibility specs
Date: Fri, 07 Aug 2015 16:46:27 +0300
> Date: Thu, 6 Aug 2015 21:16:26 +0000
> From: Pip Cet <pipcet <at> gmail.com>
> Cc: 21200 <at> debbugs.gnu.org
> 
> thank you for responding. I've attached the output of M-x
> report-emacs-bug, including the gdb backtrace and a test script that
> triggers the problem. If you need me to run further tests, please let
> me know.

Thanks.  Your analysis was correct, of course.  I fixed the bug with a
slightly different change (see commit 701484d on master), and also
added to the display engine's test suite a test case like the one you
presented.

> My apologies for sending an incomplete report at first.

No need to apologize.


This bug report was last modified 10 years and 3 days ago.

Previous Next


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