[hvf] Correctly initialize driver if no HVF library is available.

Since this font driver is by default enabled in `modules.cfg` and its
availability controlled by `FT_CONFIG_OPTION_HVF`, we need to provide some
stubs so that HVF fonts can be correctly rejected if there is no HVF library
available.

Fixes issue #1409.

* src/hvf/hvfdrv.c (hvf_driver_class): Provide `hvf_face_init` and
  `hvf_slot_load_glyph` unconditionally.

* src/hvf/hvfload.c, src/hvf/hvfload.h (hvf_slot_load_glyph)
  [!FT_CONFIG_OPTION_HVF]: Define stub.
* src/hvf/hvfobjs.c, src/hvf/hvfobjs.h (hvf_face_init)
  [!FT_CONFIG_OPTION_HVF]: Define stub.
This commit is contained in:
Werner Lemberg 2026-04-02 07:23:11 +02:00
parent 675a94f5d0
commit cc1adf8d64
5 changed files with 46 additions and 13 deletions

View file

@ -700,14 +700,14 @@
sizeof ( FT_SizeRec ),
sizeof ( FT_GlyphSlotRec ),
PUT_HVF_MODULE( hvf_face_init ), /* FT_Face_InitFunc init_face */
hvf_face_init, /* FT_Face_InitFunc init_face */
PUT_HVF_MODULE( hvf_face_done ), /* FT_Face_DoneFunc done_face */
NULL, /* FT_Size_InitFunc init_size */
NULL, /* FT_Size_DoneFunc done_size */
NULL, /* FT_Slot_InitFunc init_slot */
NULL, /* FT_Slot_DoneFunc done_slot */
PUT_HVF_MODULE( hvf_slot_load_glyph ), /* FT_Slot_LoadFunc load_glyph */
hvf_slot_load_glyph, /* FT_Slot_LoadFunc load_glyph */
PUT_HVF_MODULE( hvf_get_kerning ),
/* FT_Face_GetKerningFunc get_kerning */

View file

@ -556,7 +556,23 @@
return error;
}
#endif /* FT_CONFIG_OPTION_HVF */
#else /* !FT_CONFIG_OPTION_HVF */
FT_LOCAL_DEF( FT_Error )
hvf_slot_load_glyph( FT_GlyphSlot glyph,
FT_Size size,
FT_UInt glyph_index,
FT_Int32 load_flags )
{
FT_UNUSED( glyph );
FT_UNUSED( size );
FT_UNUSED( glyph_index );
FT_UNUSED( load_flags );
return FT_THROW( Unimplemented_Feature );
}
#endif /* !FT_CONFIG_OPTION_HVF */
/* END */

View file

@ -27,13 +27,11 @@
FT_BEGIN_HEADER
#ifdef FT_CONFIG_OPTION_HVF
FT_LOCAL( FT_Error )
hvf_slot_load_glyph( FT_GlyphSlot glyph,
FT_Size size,
FT_UInt glyph_index,
FT_Int32 load_flags );
#endif /* FT_CONFIG_OPTION_HVF */
FT_END_HEADER

View file

@ -486,7 +486,25 @@
sfnt->done_face( tt_face );
}
#endif /* FT_CONFIG_OPTION_HVF */
#else /* !FT_CONFIG_OPTION_HVF */
FT_LOCAL_DEF( FT_Error )
hvf_face_init( FT_Stream stream,
FT_Face face,
FT_Int typeface_index,
FT_Int num_params,
FT_Parameter* parameters )
{
FT_UNUSED( stream );
FT_UNUSED( face );
FT_UNUSED( typeface_index );
FT_UNUSED( num_params );
FT_UNUSED( parameters );
return FT_THROW( Unknown_File_Format );
}
#endif /* !FT_CONFIG_OPTION_HVF */
/* END */

View file

@ -126,13 +126,6 @@ FT_BEGIN_HEADER
/* Function declarations. */
FT_LOCAL( FT_Error )
hvf_face_init( FT_Stream stream,
FT_Face face,
FT_Int typeface_index,
FT_Int num_params,
FT_Parameter* parameters );
FT_LOCAL( void )
hvf_face_done( FT_Face face );
@ -147,6 +140,14 @@ FT_BEGIN_HEADER
#endif /* FT_CONFIG_OPTION_HVF */
FT_LOCAL( FT_Error )
hvf_face_init( FT_Stream stream,
FT_Face face,
FT_Int typeface_index,
FT_Int num_params,
FT_Parameter* parameters );
FT_END_HEADER
#endif /* HVFOBJS_H_ */