freetype-commit
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[freetype2] master ef48a3327: * src/svg/ftsvg.c (ft_svg_property_set): D


From: Werner Lemberg
Subject: [freetype2] master ef48a3327: * src/svg/ftsvg.c (ft_svg_property_set): Disallow NULL pointers.
Date: Sun, 23 Jan 2022 13:13:54 -0500 (EST)

branch: master
commit ef48a332712ab4b3b509a3a2f2f045763c238b61
Author: Werner Lemberg <wl@gnu.org>
Commit: Werner Lemberg <wl@gnu.org>

    * src/svg/ftsvg.c (ft_svg_property_set): Disallow NULL pointers.
---
 include/freetype/otsvg.h |  2 ++
 src/svg/ftsvg.c          | 20 +++++++++++++++++++-
 2 files changed, 21 insertions(+), 1 deletion(-)

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;
   }
 



reply via email to

[Prev in Thread] Current Thread [Next in Thread]