diff --git a/render/glyph.c b/render/glyph.c index cc982a038..19ad9cf0b 100644 --- a/render/glyph.c +++ b/render/glyph.c @@ -123,6 +123,10 @@ FindGlyphRef(GlyphHashPtr hash, CARD32 elt, step, s; GlyphPtr glyph; GlyphRefPtr table, gr, del; + + if ((hash == NULL) || (hash->hashSet == NULL)) + return NULL; + CARD32 tableSize = hash->hashSet->size; table = hash->table; @@ -267,7 +271,7 @@ FreeGlyph(GlyphPtr glyph, int format) gr = FindGlyphRef(&globalGlyphs[format], signature, TRUE, glyph->sha1); if (gr - globalGlyphs[format].table != first) DuplicateRef(glyph, "Found wrong one"); - if (gr->glyph && gr->glyph != DeletedGlyph) { + if (gr && gr->glyph && gr->glyph != DeletedGlyph) { gr->glyph = DeletedGlyph; gr->signature = 0; globalGlyphs[format].tableEntries--; @@ -384,6 +388,7 @@ AllocateGlyph(xGlyphInfo * gi, int fdepth) static Bool AllocateGlyphHash(GlyphHashPtr hash, GlyphHashSetPtr hashSet) { + assert(hashSet); hash->table = calloc(hashSet->size, sizeof(GlyphRefRec)); if (!hash->table) return FALSE; @@ -418,10 +423,10 @@ ResizeGlyphHash(GlyphHashPtr hash, CARD32 change, Bool global) glyph = hash->table[i].glyph; if (glyph && glyph != DeletedGlyph) { s = hash->table[i].signature; - gr = FindGlyphRef(&newHash, s, global, glyph->sha1); - - gr->signature = s; - gr->glyph = glyph; + if ((gr = FindGlyphRef(&newHash, s, global, glyph->sha1))) { + gr->signature = s; + gr->glyph = glyph; + } ++newHash.tableEntries; } }