]> git.eshelyaron.com Git - emacs.git/commitdiff
Avoid assertion violations in 'pop_it'
authorEli Zaretskii <eliz@gnu.org>
Wed, 28 Sep 2022 13:46:39 +0000 (16:46 +0300)
committerEli Zaretskii <eliz@gnu.org>
Wed, 28 Sep 2022 13:46:39 +0000 (16:46 +0300)
* src/xdisp.c (pop_it): Avoid assertion violations when handling
lists or vectors of display properties.  (Bug#58122)

src/xdisp.c

index 6d42105474f9db620d6c4fe629dc2d2a81d4ce89..f5f3a811e9d6fdc5287c620fc7dcad376b9d373f 100644 (file)
@@ -6755,7 +6755,14 @@ pop_it (struct it *it)
               || (STRINGP (it->object)
                   && IT_STRING_CHARPOS (*it) == it->bidi_it.charpos
                   && IT_STRING_BYTEPOS (*it) == it->bidi_it.bytepos)
-              || (CONSP (it->object) && it->method == GET_FROM_STRETCH));
+              || (CONSP (it->object) && it->method == GET_FROM_STRETCH)
+              /* We could be in the middle of handling a list or a
+                 vector of several 'display' properties, in which
+                 case we should only verify the above conditions when
+                 we pop the iterator stack the last time, because
+                 higher stack levels cannot "iterate out of the
+                 display property".  */
+              || it->sp > 0);
     }
   /* If we move the iterator over text covered by a display property
      to a new buffer position, any info about previously seen overlays