ref: f594ffdc357a4e73f739fa6c2c79f656b7d31a0b
parent: 2e2f3cb5baf1aed20c4eda08e043a2cf2515f275
author: Sebastian Rasmussen <[email protected]>
date: Fri Jun 19 14:55:49 EDT 2020
[cff] Fix another two memory leaks (#58629). * src/cff/cffobjs.c (cff_size_init): If a call to `funcs->create' fails to allocate one of the `internal->subfont' variables, make sure to free `internal->topfont' and any successfully allocated subfonts.
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,14 @@
2020-06-19 Sebastian Rasmussen <[email protected]>
+ [cff] Fix another two memory leaks (#58629).
+
+ * src/cff/cffobjs.c (cff_size_init): If a call to `funcs->create'
+ fails to allocate one of the `internal->subfont' variables, make
+ sure to free `internal->topfont' and any successfully allocated
+ subfonts.
+
+2020-06-19 Sebastian Rasmussen <[email protected]>
+
[psaux] Fix memory leak (#58626).
* src/psaux/psstack.c (cf2_stack_init): If `cf2_stack_init' fails to
--- a/src/cff/cffobjs.c
+++ b/src/cff/cffobjs.c
@@ -168,47 +168,53 @@
FT_Memory memory = cffsize->face->memory;
CFF_Internal internal = NULL;
+ CFF_Face face = (CFF_Face)cffsize->face;
+ CFF_Font font = (CFF_Font)face->extra.data;
+ PS_PrivateRec priv;
- if ( funcs )
- {
- CFF_Face face = (CFF_Face)cffsize->face;
- CFF_Font font = (CFF_Font)face->extra.data;
+ FT_UInt i;
- PS_PrivateRec priv;
+ if ( !funcs )
+ goto Exit;
- FT_UInt i;
+ if ( FT_NEW( internal ) )
+ goto Exit;
-
- if ( FT_NEW( internal ) )
- goto Exit;
-
- cff_make_private_dict( &font->top_font, &priv );
- error = funcs->create( cffsize->face->memory, &priv,
+ cff_make_private_dict( &font->top_font, &priv );
+ error = funcs->create( cffsize->face->memory, &priv,
&internal->topfont );
- if ( error )
- goto Exit;
+ if ( error )
+ goto Exit;
- for ( i = font->num_subfonts; i > 0; i-- )
- {
- CFF_SubFont sub = font->subfonts[i - 1];
+ for ( i = font->num_subfonts; i > 0; i-- )
+ {
+ CFF_SubFont sub = font->subfonts[i - 1];
- cff_make_private_dict( sub, &priv );
- error = funcs->create( cffsize->face->memory, &priv,
+ cff_make_private_dict( sub, &priv );
+ error = funcs->create( cffsize->face->memory, &priv,
&internal->subfonts[i - 1] );
- if ( error )
- goto Exit;
- }
-
- cffsize->internal->module_data = internal;
+ if ( error )
+ goto Exit;
}
+ cffsize->internal->module_data = internal;
+
size->strike_index = 0xFFFFFFFFUL;
Exit:
if ( error )
+ {
+ if ( internal )
+ {
+ for ( i = font->num_subfonts; i > 0; i-- )
+ FT_FREE( internal->subfonts[i - 1] );
+ FT_FREE( internal->topfont );
+ }
+
FT_FREE( internal );
+ }
return error;
}