diff options
author | Moazin Khatti <moazinkhatri@gmail.com> | 2019-07-21 13:43:13 +0500 |
---|---|---|
committer | Moazin Khatti <moazinkhatri@gmail.com> | 2019-08-26 01:17:14 +0500 |
commit | 4025f1213eee11b55aef18713901ed62acf131c0 (patch) | |
tree | d9cfed0be78be4ba4cc926796c37409013ab0b6f | |
parent | 246ac684e4909249d54d265ae07620eb40840a44 (diff) | |
download | freetype2-4025f1213eee11b55aef18713901ed62acf131c0.tar.gz |
Add a `hooks_set' flag.
A flag is to be used to indicate whether hooks
have been set or not. In case the hooks haven't
been set, a `Missing_SVG_Hooks' error will be
thrown.
-rw-r--r-- | include/freetype/fterrdef.h | 2 | ||||
-rw-r--r-- | src/svg/ftsvg.c | 15 | ||||
-rw-r--r-- | src/svg/svgtypes.c | 1 |
3 files changed, 15 insertions, 3 deletions
diff --git a/include/freetype/fterrdef.h b/include/freetype/fterrdef.h index 9bc7dc65e..bbd8c9bb1 100644 --- a/include/freetype/fterrdef.h +++ b/include/freetype/fterrdef.h @@ -234,6 +234,8 @@ "found FDEF or IDEF opcode in glyf bytecode" ) FT_ERRORDEF_( Missing_Bitmap, 0x9D, "missing bitmap in strike" ) + FT_ERRORDEF_( Missing_SVG_Hooks, 0x9E, + "hooks have not been set" ) /* CFF, CID, and Type 1 errors */ diff --git a/src/svg/ftsvg.c b/src/svg/ftsvg.c index 5c9d081a3..df0a702c6 100644 --- a/src/svg/ftsvg.c +++ b/src/svg/ftsvg.c @@ -39,6 +39,9 @@ svg_module->hooks.free_svg = (SVG_Lib_Free_Func)rsvg_port_free; svg_module->hooks.render_svg = (SVG_Lib_Render_Func)rsvg_port_render; svg_module->hooks.get_buffer_size = (SVG_Lib_Get_Buffer_Size_Func)rsvg_port_get_buffer_size; + svg_module->hooks_set = TRUE; +#else + svg_module->hooks_set = FALSE; #endif return error; } @@ -47,7 +50,8 @@ ft_svg_done( SVG_Renderer svg_module ) { FT_Library library = svg_module->root.root.library; - if ( svg_module->loaded == TRUE ) + if ( svg_module->loaded == TRUE && + svg_module->hooks_set == TRUE ) svg_module->hooks.free_svg( library ); svg_module->loaded = FALSE; } @@ -63,10 +67,14 @@ FT_Memory memory = library->memory; FT_BBox outline_bbox; FT_Error error; - FT_ULong size_image_buffer; + FT_ULong size_image_buffer; SVG_RendererHooks hooks = svg_renderer->hooks; + if ( svg_renderer->hooks_set == FALSE ) + { + return FT_THROW( Missing_SVG_Hooks ); + } if ( svg_renderer->loaded == FALSE ) { @@ -100,7 +108,8 @@ if ( !ft_strcmp( property_name, "svg_hooks" ) ) { SVG_RendererHooks* hooks = (SVG_RendererHooks*)value; - renderer->hooks = *hooks; + renderer->hooks = *hooks; + renderer->hooks_set = TRUE; } else { diff --git a/src/svg/svgtypes.c b/src/svg/svgtypes.c index b82d51e6d..f7008f330 100644 --- a/src/svg/svgtypes.c +++ b/src/svg/svgtypes.c @@ -25,6 +25,7 @@ { FT_RendererRec root; /* This inherits FT_RendererRec */ FT_Bool loaded; + FT_Bool hooks_set; SVG_RendererHooks hooks; /* Holds out hooks to the outside library */ } SVG_RendererRec; |