Skip to content

Commit

Permalink
Fix bug #12196 with incorrect memory allocations for region-cache.
Browse files Browse the repository at this point in the history
 src/region-cache.c (move_cache_gap): Update gap_len using the actual
 growth of the boundaries array.  Do not change cache_len.
  • Loading branch information
Eli-Zaretskii committed Aug 15, 2012
1 parent 4406fdb commit a60ed6f
Show file tree
Hide file tree
Showing 2 changed files with 9 additions and 3 deletions.
6 changes: 6 additions & 0 deletions src/ChangeLog
Original file line number Diff line number Diff line change
@@ -1,3 +1,9 @@
2012-08-15 Eli Zaretskii <eliz@gnu.org>

* region-cache.c (move_cache_gap): Update gap_len using the actual
growth of the boundaries array. Do not change cache_len.
(Bug#12196)

2012-08-15 Dmitry Antipov <dmantipov@yandex.ru>

Generalize and cleanup font subsystem checks.
Expand Down
6 changes: 3 additions & 3 deletions src/region-cache.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down

0 comments on commit a60ed6f

Please sign in to comment.