summaryrefslogtreecommitdiff
path: root/src/region-cache.c
diff options
context:
space:
mode:
authorEli Zaretskii <eliz@gnu.org>2012-08-15 19:21:41 +0300
committerEli Zaretskii <eliz@gnu.org>2012-08-15 19:21:41 +0300
commiteb424fe3d660eebd9b74dd5d2875e2e4b7b3307f (patch)
tree8b1a18195befbdd27478da75a623666c3d6a983d /src/region-cache.c
parent4e6a86c633a4ca3084a7bc30101f8b4acdd38d28 (diff)
downloademacs-eb424fe3d660eebd9b74dd5d2875e2e4b7b3307f.tar.gz
Fix bug #12196 with incorrect memory allocations for region-cache.
src/region-cache.c (move_cache_gap): Update gap_len using the actual growth of the boundaries array. Do not change cache_len.
Diffstat (limited to 'src/region-cache.c')
-rw-r--r--src/region-cache.c6
1 files changed, 3 insertions, 3 deletions
diff --git a/src/region-cache.c b/src/region-cache.c
index 14b6233a5a5..d2bba8c11b2 100644
--- a/src/region-cache.c
+++ b/src/region-cache.c
@@ -245,16 +245,16 @@ move_cache_gap (struct region_cache *c, ptrdiff_t pos, ptrdiff_t min_size)
when the portion after the gap is smallest. */
if (gap_len < min_size)
{
- ptrdiff_t i;
+ ptrdiff_t i, nboundaries = c->cache_len;
c->boundaries =
- xpalloc (c->boundaries, &c->cache_len, min_size, -1,
+ xpalloc (c->boundaries, &nboundaries, min_size - gap_len, -1,
sizeof *c->boundaries);
/* Some systems don't provide a version of the copy routine that
can be trusted to shift memory upward into an overlapping
region. memmove isn't widely available. */
- min_size -= gap_len;
+ min_size = nboundaries - c->cache_len - gap_len;
for (i = c->cache_len - 1; i >= gap_start; i--)
{
c->boundaries[i + min_size].pos = c->boundaries[i + gap_len].pos;