diff --git a/include/freetype/otsvg.h b/include/freetype/otsvg.h index 2b3c00f29..2caadfdee 100644 --- a/include/freetype/otsvg.h +++ b/include/freetype/otsvg.h @@ -223,6 +223,8 @@ FT_BEGIN_HEADER * For example, in the preset hook one can draw the glyph on a recorder * surface and later create a bitmap surface from it in the render hook. * + * All four hooks must be non-NULL. + * * @fields: * init_svg :: * The initialization hook. diff --git a/src/svg/ftsvg.c b/src/svg/ftsvg.c index 569f8ccf8..55c50718f 100644 --- a/src/svg/ftsvg.c +++ b/src/svg/ftsvg.c @@ -168,16 +168,34 @@ if ( value_is_string == TRUE ) - return FT_THROW( Invalid_Argument ); + { + error = FT_THROW( Invalid_Argument ); + goto Exit; + } hooks = (SVG_RendererHooks*)value; + if ( !hooks->init_svg || + !hooks->free_svg || + !hooks->render_svg || + !hooks->preset_slot ) + { + FT_TRACE0(( "ft_svg_property_set:" + " SVG rendering hooks not set because\n" )); + FT_TRACE0(( " " + " at least one function pointer is NULL\n" )); + + error = FT_THROW( Invalid_Argument ); + goto Exit; + } + renderer->hooks = *hooks; renderer->hooks_set = TRUE; } else error = FT_THROW( Missing_Property ); + Exit: return error; }