From d7078aefa029a7f6beea9fb0803305600ab7d0f5 Mon Sep 17 00:00:00 2001 From: "Kim F. Storm" Date: Sun, 28 Dec 2003 00:12:45 +0000 Subject: [PATCH] (cache_face): Abort if c->size exceeds MAX_FACE_ID. --- src/xfaces.c | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/src/xfaces.c b/src/xfaces.c index f079e2e4484..55455abdbd7 100644 --- a/src/xfaces.c +++ b/src/xfaces.c @@ -5577,12 +5577,19 @@ cache_face (c, face, hash) face->id = i; /* Maybe enlarge C->faces_by_id. */ - if (i == c->used && c->used == c->size) + if (i == c->used) { - int new_size = 2 * c->size; - int sz = new_size * sizeof *c->faces_by_id; - c->faces_by_id = (struct face **) xrealloc (c->faces_by_id, sz); - c->size = new_size; + if (c->used == c->size) + { + int new_size, sz; + new_size = min (2 * c->size, MAX_FACE_ID); + if (new_size == c->size) + abort (); /* Alternatives? ++kfs */ + sz = new_size * sizeof *c->faces_by_id; + c->faces_by_id = (struct face **) xrealloc (c->faces_by_id, sz); + c->size = new_size; + } + c->used++; } #if GLYPH_DEBUG @@ -5601,8 +5608,6 @@ cache_face (c, face, hash) #endif /* GLYPH_DEBUG */ c->faces_by_id[i] = face; - if (i == c->used) - ++c->used; } -- 2.39.2