summaryrefslogtreecommitdiff
path: root/src/truetype/ttgload.c
diff options
context:
space:
mode:
authorWerner Lemberg <wl@gnu.org>2018-05-15 17:01:22 +0200
committerWerner Lemberg <wl@gnu.org>2018-05-15 17:01:22 +0200
commitbefee11296032fc8b25d87bf0f65c18bb67682bb (patch)
tree4ebceba1e1970a13e81611debcc9ff6aeee11074 /src/truetype/ttgload.c
parent5fd125640a7c4130486511fa4e40ac8195dc4373 (diff)
downloadfreetype2-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.c15
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: