From: Eli Zaretskii Date: Sun, 21 Apr 2024 13:06:34 +0000 (+0300) Subject: Avoid assertion violations in 'push_prefix_prop' X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=f425c06afbf0370eaadd1cb60fb0b34dbd2dc6a3;p=emacs.git Avoid assertion violations in 'push_prefix_prop' * src/xdisp.c (push_prefix_prop): Set the 'string_from_prefix_prop_p' flag for any valid value of the 'line-prefix' or 'wrap-prefix' property/variable. (Bug#70495) (cherry picked from commit aed2b7a3d82fd16789befe3c6e4c05e20ed0ae60) --- diff --git a/src/dispextern.h b/src/dispextern.h index c3c2d61082b..1ead52b87b2 100644 --- a/src/dispextern.h +++ b/src/dispextern.h @@ -2419,7 +2419,9 @@ struct it bool_bf string_from_display_prop_p : 1; /* True means `string' comes from a `line-prefix' or `wrap-prefix' - property. */ + property, and that these properties were already handled, even if + their value is not a string. This is used to avoid processing + the same line/wrap prefix more than once for the same glyph row. */ bool_bf string_from_prefix_prop_p : 1; /* True means we are iterating an object that came from a value of a diff --git a/src/xdisp.c b/src/xdisp.c index 7c2aba0fe34..92b1fbfc3c7 100644 --- a/src/xdisp.c +++ b/src/xdisp.c @@ -24415,6 +24415,7 @@ push_prefix_prop (struct it *it, Lisp_Object prop) { it->method = GET_FROM_STRETCH; it->object = prop; + it->string_from_prefix_prop_p = true; } #ifdef HAVE_WINDOW_SYSTEM else if (IMAGEP (prop)) @@ -24422,6 +24423,7 @@ push_prefix_prop (struct it *it, Lisp_Object prop) it->what = IT_IMAGE; it->image_id = lookup_image (it->f, prop, it->face_id); it->method = GET_FROM_IMAGE; + it->string_from_prefix_prop_p = true; } #endif /* HAVE_WINDOW_SYSTEM */ else