[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Emacs-diffs] emacs-26 7669bf7: Avoid assertion violations in set_text_p
From: |
Eli Zaretskii |
Subject: |
[Emacs-diffs] emacs-26 7669bf7: Avoid assertion violations in set_text_properties_1 |
Date: |
Thu, 2 Aug 2018 09:31:04 -0400 (EDT) |
branch: emacs-26
commit 7669bf7880e54aae7036a1b62db3693c2f627649
Author: Eli Zaretskii <address@hidden>
Commit: Eli Zaretskii <address@hidden>
Avoid assertion violations in set_text_properties_1
* src/textprop.c (set_text_properties): If the call to
modify_text_properties modifies the interval tree as side effect,
recalculate the correct interval for START and END. (Bug#32265)
---
src/textprop.c | 20 ++++++++++++++++++--
1 file changed, 18 insertions(+), 2 deletions(-)
diff --git a/src/textprop.c b/src/textprop.c
index 984f2e6..904e226 100644
--- a/src/textprop.c
+++ b/src/textprop.c
@@ -1350,6 +1350,7 @@ set_text_properties (Lisp_Object start, Lisp_Object end,
Lisp_Object properties,
{
register INTERVAL i;
Lisp_Object ostart, oend;
+ bool first_time = true;
ostart = start;
oend = end;
@@ -1372,6 +1373,7 @@ set_text_properties (Lisp_Object start, Lisp_Object end,
Lisp_Object properties,
return Qt;
}
+ retry:
i = validate_interval_range (object, &start, &end, soft);
if (!i)
@@ -1391,8 +1393,22 @@ set_text_properties (Lisp_Object start, Lisp_Object end,
Lisp_Object properties,
return Qnil;
}
- if (BUFFERP (object) && !NILP (coherent_change_p))
- modify_text_properties (object, start, end);
+ if (BUFFERP (object) && !NILP (coherent_change_p) && first_time)
+ {
+ ptrdiff_t prev_length = LENGTH (i);
+ ptrdiff_t prev_pos = i->position;
+
+ modify_text_properties (object, start, end);
+ /* If someone called us recursively as a side effect of
+ modify_text_properties, and changed the intervals behind our
+ back, we cannot continue with I, because its data changed.
+ So we restart the interval analysis anew. */
+ if (LENGTH (i) != prev_length || i->position != prev_pos)
+ {
+ first_time = false;
+ goto retry;
+ }
+ }
set_text_properties_1 (start, end, properties, object, i);
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Emacs-diffs] emacs-26 7669bf7: Avoid assertion violations in set_text_properties_1,
Eli Zaretskii <=