summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEli Zaretskii <eliz@gnu.org>2015-02-28 12:33:32 +0200
committerEli Zaretskii <eliz@gnu.org>2015-02-28 12:33:32 +0200
commitf1601063f29c99be77d2513320ed6d2494926c1d (patch)
tree823f2f78c679678f54d21e9e74be3dc1c7bd0d84
parent1b0ebbdb566a8dfa5f45ce121b2c835e9760091f (diff)
downloademacs-f1601063f29c99be77d2513320ed6d2494926c1d.tar.gz
Avoid assertion violations in Rmail due to newline cache
src/search.c (find_newline): Avoid assertion violations in CHAR_TO_BYTE when a portion of the buffer was deleted and we look for newlines near the end of the buffer. This happens in Rmail hen JIT font-lock fontifies a newly displayed portion of the buffer.
-rw-r--r--src/ChangeLog8
-rw-r--r--src/search.c6
2 files changed, 14 insertions, 0 deletions
diff --git a/src/ChangeLog b/src/ChangeLog
index a2ac5389f20..ca5f85a0157 100644
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -1,3 +1,11 @@
+2015-02-28 Eli Zaretskii <eliz@gnu.org>
+
+ * search.c (find_newline): Avoid assertion violations in
+ CHAR_TO_BYTE when a portion of the buffer was deleted and we look
+ for newlines near the end of the buffer. This happens in Rmail
+ hen JIT font-lock fontifies a newly displayed portion of the
+ buffer.
+
2015-02-23 Eli Zaretskii <eliz@gnu.org>
* w32fns.c (Fw32__menu_bar_in_use): New internal function.
diff --git a/src/search.c b/src/search.c
index eec642ecb20..73641813604 100644
--- a/src/search.c
+++ b/src/search.c
@@ -731,6 +731,12 @@ find_newline (ptrdiff_t start, ptrdiff_t start_byte, ptrdiff_t end,
start, &next_change);
if (result)
{
+ /* When the cache revalidation is deferred,
+ next-change might point beyond ZV, which will
+ cause assertion violation in CHAR_TO_BYTE below.
+ Limit next_change to ZV to avoid that. */
+ if (next_change > ZV)
+ next_change = ZV;
start = next_change;
lim1 = next_change = end;
}