From 6bf9db4f1e1d51f9acb5e37b89caa8f4d275e7ce Mon Sep 17 00:00:00 2001 From: Birunthan Mohanathas Date: Mon, 11 Jul 2016 13:38:23 -0700 Subject: [PATCH] [ft] Fix unsafe cast of FT_Done_Face in hb_ft_{face,font}_create_referenced (#289) Prior to this change the function `FT_Error FT_Done_Face(FT_Face *)` was called through a pointer with the signature `void (void *)` resulting in undefined behaviour. --- src/hb-ft.cc | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/src/hb-ft.cc b/src/hb-ft.cc index 2cad8c264..6c6749c1d 100644 --- a/src/hb-ft.cc +++ b/src/hb-ft.cc @@ -89,11 +89,17 @@ _hb_ft_font_create (FT_Face ft_face, bool unref) return ft_font; } +static void +_hb_ft_face_destroy (FT_Face ft_face) +{ + FT_Done_Face (ft_face); +} + static void _hb_ft_font_destroy (hb_ft_font_t *ft_font) { if (ft_font->unref) - FT_Done_Face (ft_font->ft_face); + _hb_ft_face_destroy (ft_font->ft_face); free (ft_font); } @@ -526,7 +532,7 @@ hb_face_t * hb_ft_face_create_referenced (FT_Face ft_face) { FT_Reference_Face (ft_face); - return hb_ft_face_create (ft_face, (hb_destroy_func_t) FT_Done_Face); + return hb_ft_face_create (ft_face, (hb_destroy_func_t) _hb_ft_face_destroy); } static void @@ -606,7 +612,7 @@ hb_font_t * hb_ft_font_create_referenced (FT_Face ft_face) { FT_Reference_Face (ft_face); - return hb_ft_font_create (ft_face, (hb_destroy_func_t) FT_Done_Face); + return hb_ft_font_create (ft_face, (hb_destroy_func_t) _hb_ft_face_destroy); }