emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Emacs-diffs] emacs/src ChangeLog xdisp.c


From: Andreas Schwab
Subject: [Emacs-diffs] emacs/src ChangeLog xdisp.c
Date: Fri, 11 Sep 2009 16:46:11 +0000

CVSROOT:        /sources/emacs
Module name:    emacs
Changes by:     Andreas Schwab <schwab> 09/09/11 16:46:11

Modified files:
        src            : ChangeLog xdisp.c 

Log message:
        (display_mode_element): Detect cycles.

CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/emacs/src/ChangeLog?cvsroot=emacs&r1=1.7740&r2=1.7741
http://cvs.savannah.gnu.org/viewcvs/emacs/src/xdisp.c?cvsroot=emacs&r1=1.1298&r2=1.1299

Patches:
Index: ChangeLog
===================================================================
RCS file: /sources/emacs/emacs/src/ChangeLog,v
retrieving revision 1.7740
retrieving revision 1.7741
diff -u -b -r1.7740 -r1.7741
--- ChangeLog   11 Sep 2009 05:10:15 -0000      1.7740
+++ ChangeLog   11 Sep 2009 16:46:08 -0000      1.7741
@@ -1,3 +1,7 @@
+2009-09-11  Andreas Schwab  <address@hidden>
+
+       * xdisp.c (display_mode_element): Detect cycles.
+
 2009-09-11  Stefan Monnier  <address@hidden>
 
        * keymap.c (where_is_internal): Don't erroneously return nil right after

Index: xdisp.c
===================================================================
RCS file: /sources/emacs/emacs/src/xdisp.c,v
retrieving revision 1.1298
retrieving revision 1.1299
diff -u -b -r1.1298 -r1.1299
--- xdisp.c     10 Sep 2009 03:20:52 -0000      1.1298
+++ xdisp.c     11 Sep 2009 16:46:10 -0000      1.1299
@@ -17750,14 +17750,10 @@
          }
        else if (STRINGP (car) || CONSP (car))
          {
-           register int limit = 5000;
-           /* Limit is to protect against circular lists.
-              The limit used to be 50, but if you use enough minor modes,
-              minor-mode-alist will easily grow past 50.  Circular lists
-              are rather unlikely, so it's better for the limit to be
-              "too large" rather than "too small".  */
+           Lisp_Object halftail = elt;
+           int len = 0;
+
            while (CONSP (elt)
-                  && --limit > 0
                   && (precision <= 0 || n < precision))
              {
                n += display_mode_element (it, depth,
@@ -17769,6 +17765,12 @@
                                           precision - n, XCAR (elt),
                                           props, risky);
                elt = XCDR (elt);
+               len++;
+               if ((len & 1) == 0)
+                 halftail = XCDR (halftail);
+               /* Check for cycle.  */
+               if (EQ (halftail, elt))
+                 break;
              }
          }
       }




reply via email to

[Prev in Thread] Current Thread [Next in Thread]