8146 Commits

Author SHA1 Message Date
Alexei Podtelezhnikov
56b53a86e0 * src/bdf/bdflib.c (bdf_is_atom_): Do not check tabs. 2025-03-25 21:23:46 -04:00
Alexei Podtelezhnikov
7ddb53fcac * src/bdf/bdflib.c (_bdf_strncmp): Macro removed, callers updated. 2025-03-25 21:22:52 -04:00
Alexei Podtelezhnikov
5d4e649f74 .gitlab-ci.yml: Minor. 2025-02-26 15:35:25 +00:00
Tim-Philipp Müller
316bdc96ce * .gitlab-ci.yml: Switch to arm64 runners for macOS CI. 2025-02-26 15:32:27 +00:00
Behdad Esfahbod
d0c905c62a [sfnt/CPAL] Return early if user requested currently-set palette
Before, we were loading a palette (again and again) even if the
same was requested. Even if the font only had one palette...

For a font like NotoColorEmoji that has over 5000 colors in its
palette, this was dominating the COLRv1 loading times for HarfBuzz
(and I believe all other clients) because they have to set the
palette to get access to the colors.

* src/base/ftcolor.c (FT_Palette_Select): Check the current palette.
2025-02-24 19:13:39 -05:00
Alexei Podtelezhnikov
b1f4785087 * src/bdf/bdflib.c (bdf_parse_start_): Move setup of properties. 2025-01-28 22:49:21 -05:00
Alexei Podtelezhnikov
00a1567a13 [bdf] Treat all comments uniformly.
* src/bdf/bdflib.c (bdf_parse_start_): Reject fonts with initial
COMMENTs.
(bdf_parse_properties_): Skip COMMENTs so that...
(bdf_add_property_): Do not make exception for COMMENT.
(bdf_parse_glyphs_, bdf_add_comments): Updated.
2025-01-24 22:36:56 -05:00
Alexei Podtelezhnikov
fdae51ccb0 * src/bdf/bdflib.c (BDF_SWIDTH_ADJ_): Remove clashing flag and update. 2025-01-24 22:03:00 -05:00
Alexei Podtelezhnikov
bfe793ccec * src/bdf/bdflib.c (bdf_atous_): Remove unnecessary checks. 2025-01-22 21:17:57 -05:00
Alexei Podtelezhnikov
40a7458500 * src/bdf/bdflib.c (bdf_ato{i.ul.s.us}_]): Remove uncecessary checks. 2025-01-22 21:05:22 -05:00
Alexei Podtelezhnikov
56131e4216 [bdf] Postpone font default char handling.
* src/bdf/bdflib.c (bdf_parse_start_, bdf_add_property_): Delay handling
of the default char until...
* src/bdf/bdfdrivr.c (BDF_Face_Init): ... handles all other properties.
2025-01-22 20:47:56 -05:00
Alexei Podtelezhnikov
8bae87065a [bdf] Postpone font spacing handling.
* src/bdf/bdf.h (bdf_font_t): Remove `monowidth`.
* src/bdf/bdflib.c (bdf_parse_start_, bdf_add_property_): Delay handling
of the font spacing until...
* src/bdf/bdfdrivr.c (BDF_Face_Init): ... handles all other properties.
2025-01-22 20:46:43 -05:00
Alexei Podtelezhnikov
c0a7839e7d [bdf] Postpone font ascent and descent handling.
* src/bdf/bdflib.c (bdf_parse_start_, bdf_add_property_): Delay handling
of the font ascent and descent until...
* src/bdf/bdfdrivr.c (BDF_Face_Init): ... handles all other properties.
2025-01-22 19:11:47 -05:00
Alexei Podtelezhnikov
c33da8fbbd * src/bdf/bdflib.c (bdf_parse_start_): Relax the header order.
We now check that the header is complete in no specific order.
2025-01-22 16:59:44 -05:00
Chad Brokaw
a059b237bb * src/truetype/ttgxvar.c (tt_face_vary_cvt): Fix all shared values.
Applying cvar deltas to all shared points was incorrectly omitted.
Fixes #1314.
2025-01-19 22:39:17 -05:00
Alexei Podtelezhnikov
b9e09e33fe * src/bdf/bdflib.c (bdf_parse_glyphs_): Fix tracing. 2025-01-19 12:35:13 -05:00
Alexei Podtelezhnikov
01c22b3668 [bdf] Tokenize input instead of listing.
Instead of cumbersome field list mamangement, we will tokenize input
using custom `bdf_strtok_`.

* src/bdf/bdflib.c (bdf_list_t_, bdf_list_init_, bdf_list_ensure_,
bdf_list_shift_, bdf_list_join_, bdf_list_split_,
bdf_set_default_spacing_): Removed.
(bdf_strtok_): New function which NUL-terminates the first token at
the delimiter position and returns the next token that follows
consequtive delimiters.
(bdf_parse_*_, bdf_load_font): Updated.

* docs/CHANGES: Claim overall 75% performance improvement.
2025-01-19 11:19:10 -05:00
Alexei Podtelezhnikov
ad7dce7751 * src/bdf/bdflib.c (bdf_parse_start_): Prevent another STARTPROPERTIES.
Only one STARTPROPERTIES was permitted in the old flow preventing
leaks and overflows.

See https://issues.oss-fuzz.com/issues/389968131
    https://issues.oss-fuzz.com/issues/390464875
2025-01-17 20:54:14 -05:00
Alexei Podtelezhnikov
e3a3b39dd0 * src/bdf/bdflib.c (bdf_parse_start_): Do not overwrite flags. 2025-01-16 23:25:08 +00:00
Alexei Podtelezhnikov
d4631a2eb3 * src/bdf/bdflib.c (bdf_readstream_): Skip all control characters.
This agrees with specifications and makes the code a lot simpler.
2025-01-16 20:54:33 +00:00
Alexei Podtelezhnikov
02953326d4 * src/bdf/bdflib.c (bdf_parse_start_): Reserve space for artificial properties. 2025-01-16 03:47:14 +00:00
Alexei Podtelezhnikov
ae11e18cbd * src/bdf/bdflib.c (bdf_add_property_): Add extra protection.
See https://issues.oss-fuzz.com/issues/389972472
    https://issues.oss-fuzz.com/issues/389968131
2025-01-15 15:50:12 +00:00
Alexei Podtelezhnikov
a0d86e5650 * src/bdf/bdflib.c: Clean up. 2025-01-14 22:58:04 -05:00
Alexei Podtelezhnikov
a3c68e3b48 [bdf] Use flags instead of options.
* src/bdf/bdf.h (bdf_options_t): Removed.
(BDF_KEEP_COMMENTS, BDF_KEEP_UNENCODED, BDF_CORRECT_METRICS): Updated
to avoid collisions with the other parsing flags.
* src/bdf/bdfdrivr.c (BDF_Face_Init): Use default flags explicitly.
* src/bdf/bdflib.c (bdf_load_font): Use flags as an argument to
initialize the parser.
(bdf_set_fedault_spacing_): Default to BDF_PROPORTIONAL explicitly.
(bdf_parse_*_): Updated.
2025-01-14 22:32:46 -05:00
Alexei Podtelezhnikov
a05c22103d [bdf] Adjust parsing flow and CHARS handling.
* src/bdf/bdflib.c (bdf_readstream_): Remove CHARS exception.
(bdf_parse_glyphs_): Move glyphs allocation...
(bdf_parse_properties_): and missing ascent and descent handling...
(bdf_parse_start_): ...to here under CHARS.
2025-01-14 21:11:33 -05:00
Alexei Podtelezhnikov
0864367ada * src/bdf/bdflib.c (bdf_readstream_): Tweak variables and loop design. 2025-01-14 18:39:50 -05:00
Alexei Podtelezhnikov
ee1310ab5c * src/bdf/bdflib.c (bdf_parse_glyphs_): Free unused glyph_name.
See https://issues.oss-fuzz.com/issues/389330334.
2025-01-13 17:19:31 +00:00
Alexei Podtelezhnikov
f219996754 * src/bdf/bdflib.c (bdf_parse_glyphs_): Store glyph as soon as possible. 2025-01-13 03:48:28 +00:00
Alexei Podtelezhnikov
aab40d5cc4 * src/bdf/bdflib.c (bdf_parse_glyphs_): Avoid possible leak. 2025-01-12 00:24:42 -05:00
Alexei Podtelezhnikov
bbc445e165 [bdf] Speed up bitmap parsing.
A dedicated parser of bitmap data with minimal error checking and
no string comparisons helps to improve performance.

* src/bdf/bdflib.c (bdf_parse_bitmap_): New dedicated bitmap parser.
(bdf_parse_glyphs_): Pass to `bdf_parse_bitmap_` on BITMAP.
2025-01-11 23:11:07 -05:00
Alexei Podtelezhnikov
4433c7b7ba * src/bdf/bdflib.c (a2i): Formatting. 2025-01-11 18:54:04 -05:00
Alexei Podtelezhnikov
ff5872b4da * src/bdf/bdflib.c (bdf_parse_*_): Minor improvements. 2025-01-10 22:55:13 -05:00
Alexei Podtelezhnikov
cf451e5ff3 * src/bdf/bdf.h (bdf_font_t): Correct internal type.
* src/bdf/bdflib.c (*): Update users.
2025-01-10 22:31:07 -05:00
Alexei Podtelezhnikov
8d536080ec * builds/windows/ftsystem.c: Fix ancient condition. 2025-01-10 22:44:40 +00:00
Alexei Podtelezhnikov
1f57020ff3 * src/bdf/bdflib.c (bdf_parse_start_): Fix tracing labels. 2025-01-10 03:23:41 +00:00
Alexei Podtelezhnikov
704d540527 * MSBuild.rsp: Force console color for mintty. 2025-01-09 15:18:55 +00:00
Heiko Lewin
1400b20ae8 * CMakeLists.txt: Use modern IMPORTED targets.
This resolves build problems with newer libPNG versions by switching
to using IMPORTED CMake targets for common libraries where provided.
To do this the required CMake version is raised to version 3.12.
Doing this seems justified as using IMPORTED targets is a cleaner
and more powerful solution that can leverage advanced and CMake-specific
features that may be utilized by the referred dependencies' CMake modules.

Resolves #1311.
2025-01-09 13:21:50 +00:00
Alexei Podtelezhnikov
73318c864a [cff] Remove size/slot checks.
After the previous commit, cff_glyph_load is no longer called
without first checking for valid size and glyph objects in
FT_Glyph_Load and these checks can be removed downstream.

* src/cff/cffdrivr.c (cff_glyph_load): Remove `size` and `glyph` checks.
* src/cff/cffgload.c (cff_slot_load): Ditto.
2025-01-08 15:45:32 -05:00
Alexei Podtelezhnikov
c7a255b462 * src/cff/cffdrivr.c (cff_get_advances): Do only fast advances.
Otherwise, let TT_Get_Advances fall back on cff_load_glyph to do
slow advances. This avoids unchecked access to cff_load_glyph and
this is how tt_get_advances is implemented.
2025-01-07 19:52:29 -05:00
Alexei Podtelezhnikov
81330e1f8a * src/truetype/ttgload.c (TT_Load_Glyph): Consolidate flag setting. 2025-01-03 22:54:20 -05:00
Alexei Podtelezhnikov
5245fd69fd Delay FT_GLYPH_FORMAT_OUTLINE assignmets.
This assignmets used to be done prematurely before errors were checked
and outlines were actually loaded. Delaying the assignment provides
certain protection against careless usage of malformed input that
should now remain FT_GLYPH_FORMAT_NONE.

* src/cff/cffgload.c (cff_slot_load): Ditto.
* src/cid/cidgload.c (cid_slot_load_glyph): Ditto.
* src/pfr/pfrobjs.c (pfr_slot_load): Ditto.
* src/truetype/ttgload.c (TT_Load_Glyph): Ditto.
* src/type1/t1gload.c (T1_Load_Glyph): Ditto.
2025-01-03 21:26:10 -05:00
Alexei Podtelezhnikov
afc7000cac * builds/compiler/gcc-dev.mk: Silence some warnings. 2025-01-03 18:17:49 +00:00
Alexei Podtelezhnikov
64f8b7fbd0 Remove superfluous outline zeroing.
This is already done by `ft_glyphslot_clear`.

* src/cff/cffgload.c (cff_slot_load): Do not zero outline fields.
* src/cid/cidgload.c (cid_slot_load_glyph: Ditto.
* src/pfr/pfrobjs.c (pfr_slot_load): Ditto.
* src/truetype/ttgload.c (load_sbit_image): Ditto.
* src/type1/t1gload.c (T1_Load_Glyph): Ditto.
2025-01-02 18:22:24 +00:00
Alexei Podtelezhnikov
10b3b14da2 * src/truetype/ttobjs.c: Abbreviate tracing. 2025-01-01 23:04:14 -05:00
Alexei Podtelezhnikov
1beb83fd12 * src/sfnt/ttsbit.c (tt_face_load_sbix_image): Refactor flip. 2025-01-01 22:28:36 -05:00
Alexei Podtelezhnikov
abed051e06 [truetype] Consolidate bitmap strike handling.
* src/truetype/ttgload.c (TT_Load_Glyph): Relocate omitted whitespace
strike handling from here...
(load_sbit_image): ... to here.
2025-01-01 14:40:58 -05:00
Alexei Podtelezhnikov
4ef8eed11b [truetype] Ingnore FT_LOAD_NO_BITMAP in bitmap-only fonts.
For consistency with other bitmap-only fonts, we should ignore this
flag of the font is not scalable.

* src/truetype/ttgload.c (TT_Load_Glyph): Check if face is scalable
when checking for FT_LOAD_NO_BITMAP.

* docs/CHANGES: Start new chapter wtith this change.
2024-12-31 16:25:50 -05:00
Ben Wagner
38272bf853 [ftstroke] Fix invalid pointer assignement to arc
In `FT_Stroker_ConicTo` and `FT_Stroker_CubicTo` there is a `bez_stack`.
`arc` is initialized with `arc = bez_stack` and is never set to point
into any different object. The main loop looks like `while ( arc >=
bez_stack )` which is depending on a later `arc -= 2` (or `arc -= 3`) to
make `arc` point to before `bez_stack`. However, using pointer
subtraction to make `arc` point outside the array is undefined behavior,
and attempting to use the value in the loop predicate is "very"
undefined behavior. (C99 "Additive operators" 6.5.6.8.)

This particular undefined behavior was discovered as either hangs or
MemorySantizer issues after "[InstCombine] Infer nuw for gep inbounds
from base of object" [0]. With this change, clang can infer that `arc`
must always point into the `bez_stack` object and therefore cannot be at
a "negative index" so the predicate is always true.

[0] e21ab4d16b

* src/base/ftstroke.c (FT_Stroker_ConicTo, FT_Stroker_CubicTo): test
loop exit condition (there are no more arcs to process) before
decrementing `arc`

Fixes: #1307
2024-12-16 14:39:10 -05:00
Ben Wagner
59320b2d3c [cff] Fix leak of cmap data
When `sfnt->load_face` succeeds it has already loaded any (optional)
cmap data. As a result, a subsequent call to `sfnt->load_cmap` will
overwrite the cmap data pointer with a new copy of the data but not free
the old, leading to a leak.

This is a fix for "* src/cff/cffobjs.c (cff_face_init): Better handling
of Type0 fonts.". This still allows the cmap to be missing but avoids
the leak by only calling `sfnt->load_cmap` when there is no `head`
table (the font data is not being loaded as OpenType/CFF).

* src/cff/cffobjs.c (cff_face_init): Fix leak

Fixes: #1306
2024-12-04 16:55:10 -05:00
Honnesh Ramachandra
3f3e3de34e * src/cff/cffobjs.c (cff_face_init): Better handling of Type0 fonts.
This issue relates to the PDF specification and its usage of CFF-based
embedded Type0 fonts.  For Type0 fonts containing CID-keyed descendant
CFF-based fonts, the glyph index is the CID present in the content stream.
As a result, there is no requirement for a 'cmap' table to be present in the
font since the glyph indices are derived directly from the CIDs.  FreeType
throws an error when it doesn’t find a 'cmap' table for such an Open Type
font containing CFF outlines.  This commit relaxes this requirement for a
'cmap' table for such fonts.
2024-11-06 06:28:41 +01:00