freetype/src/truetype
Werner Lemberg b04db3872c [sfnt] Rewrite GPOS kerning support. (2/2)
The previous code had a fundamental flaw: it didn't validate the necessary
parts of the 'GPOS' table before accessing it, causing crashes with
malformed data (since `TT_CONFIG_OPTION_GPOS_KERNING` is off by default,
standard fuzzers don't catch these problems).  Additionally, it did a lot of
parsing while accessing kerning data, making it rather slow.

The new implementation fixes this.  After validation, offsets to the 'GPOS'
lookup subtables used in the 'kern' feature that correspond to 'simple'
kerning (i.e., similar to 'kern' table kerning) are stored in `TT_Face`;
this greatly simplifies and accelerates access to the kerning data.

Testing with font `SF-Pro.ttf` version '1.00', the validation time for the
'GPOS' table increases the start-up time of `FT_New_Face` by less than 1%,
while calls to `FT_Get_Kerning` become about 3.5 times faster.

* include/freetype/internal (gpos_kerning_available): Replace with...
  (gpos_lookups_kerning, num_gpos_lookups_kerning): ... these new fields.
  Update callers.

* src/ttgpos.c [TT_CONFIG_OPTION_GPOS_KERNING]: A new implementation.
2025-07-05 14:51:40 +02:00
..
module.mk Update all copyright notices. 2024-01-27 11:11:22 -05:00
rules.mk Update all copyright notices. 2024-01-27 11:11:22 -05:00
truetype.c Update all copyright notices. 2024-01-27 11:11:22 -05:00
ttdriver.c [sfnt] Rewrite GPOS kerning support. (2/2) 2025-07-05 14:51:40 +02:00
ttdriver.h Update all copyright notices. 2024-01-27 11:11:22 -05:00
tterrors.h Update all copyright notices. 2024-01-27 11:11:22 -05:00
ttgload.c */*: Fix trivial signedness issues with format strings in trace messages. 2025-07-01 17:08:37 +02:00
ttgload.h Update all copyright notices. 2024-01-27 11:11:22 -05:00
ttgxvar.c */*: Fix trivial signedness issues with format strings in trace messages. 2025-07-01 17:08:37 +02:00
ttgxvar.h [gxvar] Cache shared-tuple scalar values. 2025-05-21 14:39:22 +02:00
ttinterp.c Various minor fixes. 2025-07-01 18:06:17 +02:00
ttinterp.h [truetype] Deduplicate 'codeRangeTable'. 2025-06-22 12:13:48 -04:00
ttobjs.c * src/truetype/ttobjs.c (tt_size_init_bytecode): Correct previous fix. 2025-07-01 21:32:47 +02:00
ttobjs.h [truetype] Deduplicate 'codeRangeTable'. 2025-06-22 12:13:48 -04:00
ttpload.c */*: Fix trivial signedness issues with format strings in trace messages. 2025-07-01 17:08:37 +02:00
ttpload.h Update all copyright notices. 2024-01-27 11:11:22 -05:00