Commit bd924a5d authored by Eli Zaretskii's avatar Eli Zaretskii

Fix a crash of I-search in a bidi-reordered buffer.

 bidi.c (bidi_cache_iterator_state): Invalidate the cache if we
 are outside the range of cached character positions.
parent 2223a1b3
2010-03-30 Eli Zaretskii <eliz@gnu.org>
* bidi.c (bidi_cache_iterator_state): Invalidate the cache if we
are outside the range of cached character positions.
2010-03-30 Juanma Barranquero <lekktu@gmail.com>
* makefile.w32-in ($(BLD)/bidi.$(O)): Add dependency on w32gui.h.
......
......@@ -671,10 +671,16 @@ bidi_cache_iterator_state (struct bidi_it *bidi_it, int resolved)
/* Don't overrun the cache limit. */
if (idx > sizeof (bidi_cache) / sizeof (bidi_cache[0]) - 1)
abort ();
/* Don't violate cache integrity: character positions should
correspond to cache positions 1:1. */
if (idx > 0 && bidi_it->charpos != bidi_cache[idx - 1].charpos + 1)
abort ();
/* Character positions should correspond to cache positions 1:1.
If we are outside the range of cached positions, the cache is
useless and must be reset. */
if (idx > 0 &&
(bidi_it->charpos > bidi_cache[idx - 1].charpos + 1
|| bidi_it->charpos < bidi_cache[0].charpos))
{
bidi_cache_reset ();
idx = 0;
}
bidi_copy_it (&bidi_cache[idx], bidi_it);
if (!resolved)
bidi_cache[idx].resolved_level = -1;
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment