summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWerner Lemberg <wl@gnu.org>2022-01-23 19:05:15 +0100
committerWerner Lemberg <wl@gnu.org>2022-01-23 19:05:15 +0100
commitef48a332712ab4b3b509a3a2f2f045763c238b61 (patch)
treee8d3ccdf5059975c632473aa110432a154ac82a2
parentcddfe6574b1f96104b7c89bdc1979b54d69ba3e0 (diff)
downloadfreetype2-ef48a332712ab4b3b509a3a2f2f045763c238b61.tar.gz
* src/svg/ftsvg.c (ft_svg_property_set): Disallow NULL pointers.
-rw-r--r--include/freetype/otsvg.h2
-rw-r--r--src/svg/ftsvg.c20
2 files changed, 21 insertions, 1 deletions
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;
}