+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.
/* 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;