diff options
author | Werner Lemberg <wl@gnu.org> | 2018-05-15 17:01:22 +0200 |
---|---|---|
committer | Werner Lemberg <wl@gnu.org> | 2018-05-15 17:01:22 +0200 |
commit | befee11296032fc8b25d87bf0f65c18bb67682bb (patch) | |
tree | 4ebceba1e1970a13e81611debcc9ff6aeee11074 /src/truetype/ttgload.c | |
parent | 5fd125640a7c4130486511fa4e40ac8195dc4373 (diff) | |
download | freetype2-befee11296032fc8b25d87bf0f65c18bb67682bb.tar.gz |
[sfnt] Fix memory leak in handling `COLR' data.
* src/truetype/ttgload.c (TT_Load_Glyph): Free old `layers' array
before reassigning allocated memory.
Only allocate `color_layers' if we don't have one already.
Diffstat (limited to 'src/truetype/ttgload.c')
-rw-r--r-- | src/truetype/ttgload.c | 15 |
1 files changed, 7 insertions, 8 deletions
diff --git a/src/truetype/ttgload.c b/src/truetype/ttgload.c index 459fe2ebf..0bd9af73f 100644 --- a/src/truetype/ttgload.c +++ b/src/truetype/ttgload.c @@ -2903,7 +2903,6 @@ FT_Glyph_LayerRec* glyph_layers; FT_UShort num_glyph_layers; - FT_Colr_Internal color_layers; error = sfnt->load_colr_layer( face, @@ -2913,17 +2912,17 @@ if ( error ) return error; - if ( num_glyph_layers ) + if ( !glyph->internal->color_layers ) { - if ( FT_NEW( color_layers ) ) + if ( FT_NEW( glyph->internal->color_layers ) ) return error; + } - color_layers->layers = glyph_layers; - color_layers->num_layers = num_glyph_layers; - color_layers->load_flags = load_flags; + FT_FREE( glyph->internal->color_layers->layers ); - glyph->internal->color_layers = color_layers; - } + glyph->internal->color_layers->layers = glyph_layers; + glyph->internal->color_layers->num_layers = num_glyph_layers; + glyph->internal->color_layers->load_flags = load_flags; } Exit: |