# HG changeset patch # User Eli Zaretskii # Date 1274253761 -10800 # Node ID ba70090bc7789c8dc0467feeb0ce555619fd1c06 # Parent 144e6ea330f05c541e9c1b439e10c276ccc1df73 Fix bug #6210. bidi.c (bidi_cache_shrink, bidi_cache_iterator_state): Fix reallocation of the cache. diff -r 144e6ea330f0 -r ba70090bc778 src/ChangeLog --- a/src/ChangeLog Tue May 18 23:06:48 2010 -0400 +++ b/src/ChangeLog Wed May 19 10:22:41 2010 +0300 @@ -1,3 +1,8 @@ +2010-05-19 Eli Zaretskii + + * bidi.c (bidi_cache_shrink, bidi_cache_iterator_state): Fix + reallocation of the cache. (Bug#6210) + 2010-05-19 Glenn Morris * s/msdos.h (ORDINARY_LINK): Move to sed2v2.inp. diff -r 144e6ea330f0 -r ba70090bc778 src/bidi.c --- a/src/bidi.c Tue May 18 23:06:48 2010 -0400 +++ b/src/bidi.c Wed May 19 10:22:41 2010 +0300 @@ -543,6 +543,7 @@ #define BIDI_CACHE_CHUNK 200 static struct bidi_it *bidi_cache; static size_t bidi_cache_size = 0; +static size_t elsz = sizeof (struct bidi_it); static int bidi_cache_idx; /* next unused cache slot */ static int bidi_cache_last_idx; /* slot of last cache hit */ @@ -558,8 +559,9 @@ { if (bidi_cache_size > BIDI_CACHE_CHUNK) { - bidi_cache_size = BIDI_CACHE_CHUNK * sizeof (struct bidi_it); - bidi_cache = (struct bidi_it *) xrealloc (bidi_cache, bidi_cache_size); + bidi_cache_size = BIDI_CACHE_CHUNK; + bidi_cache = + (struct bidi_it *) xrealloc (bidi_cache, bidi_cache_size * elsz); } bidi_cache_reset (); } @@ -688,9 +690,9 @@ /* Enlarge the cache as needed. */ if (idx >= bidi_cache_size) { - bidi_cache_size += BIDI_CACHE_CHUNK * sizeof (struct bidi_it); + bidi_cache_size += BIDI_CACHE_CHUNK; bidi_cache = - (struct bidi_it *) xrealloc (bidi_cache, bidi_cache_size); + (struct bidi_it *) xrealloc (bidi_cache, bidi_cache_size * elsz); } /* Character positions should correspond to cache positions 1:1. If we are outside the range of cached positions, the cache is