summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMoazin Khatti <moazinkhatri@gmail.com>2019-07-21 13:43:13 +0500
committerMoazin Khatti <moazinkhatri@gmail.com>2019-08-26 01:17:14 +0500
commit4025f1213eee11b55aef18713901ed62acf131c0 (patch)
treed9cfed0be78be4ba4cc926796c37409013ab0b6f
parent246ac684e4909249d54d265ae07620eb40840a44 (diff)
downloadfreetype2-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.h2
-rw-r--r--src/svg/ftsvg.c15
-rw-r--r--src/svg/svgtypes.c1
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;