Skip to content

fix: reject fonts with reserved bit 7 in glyf simple glyph flags#13144

Open
FurryR wants to merge 14 commits into
warpdotdev:masterfrom
FurryR:fix-cjk-render
Open

fix: reject fonts with reserved bit 7 in glyf simple glyph flags#13144
FurryR wants to merge 14 commits into
warpdotdev:masterfrom
FurryR:fix-cjk-render

Conversation

@FurryR

@FurryR FurryR commented Jun 28, 2026

Copy link
Copy Markdown

Description

Reject fonts with reserved bit 7 set on simple glyph coordinate flags in the glyf table. Some Linux fonts (notably DroidSansFallback.ttf from ttf-droid) have this corruption — skrifa/swash correctly enforces the spec and rejects all outlines, causing CJK glyphs to render as .notdef squares.
Detection runs at font-load time using fontdb::with_face_data (reuses fontdb's existing mmap; zero extra I/O for healthy fonts). Corrupted faces are removed from the database so they can never be matched by future fallback queries.

Linked Issue

  • The linked issue is labeled ready-to-spec or ready-to-implement.
  • Where appropriate, screenshots or a short video of the implementation are included below (especially for user-visible or UI changes).

Closes #9372.

Testing

  • I have manually tested my changes locally with ./script/run

Manual verification:

  1. Confirmed has_reserved_bit7_in_glyph_flags returns true for DroidSansFallback.ttf and DroidSansFallbackFull.ttf, false for DroidSansFallbackLegacy.ttf.
  2. Before fix: CJK characters routed to DroidSansFallback.ttf render as empty.
  3. After fix: same characters render correctly — the corrupted font is skipped and fontconfig's next fallback is used.

Comparison: Image

We can actually use DroidSansFallback.ttf but it requires some hacky patching. If that is allowed then I will refactor this fix.

Agent Mode

  • Warp Agent Mode - This PR was created via Warp's AI Agent Mode

Changelog Entries for Stable

CHANGELOG-BUG-FIX: Reject fonts with corrupted glyf table (reserved bit 7 on simple glyph flags) that caused CJK glyphs to render as .notdef squares on Linux

DroidSansFallback.ttf (and Full variant) has reserved bit 7 set on
19959/19961 simple glyph coordinate flags. While ttf_parser tolerates
this, skrifa/swash enforces the spec and rejects all outlines, causing
CJK glyphs to render as .notdef squares.

Reuse fontdb's mmap'd data to check for this corruption when loading
file-based fonts. Corrupted fonts are removed from the database
immediately so they cannot be matched by future font fallback queries.
Non-corrupted fonts incur zero extra I/O.

Signed-off-by: FurryR <awathefox@gmail.com>
@cla-bot cla-bot Bot added the cla-signed label Jun 28, 2026
@github-actions github-actions Bot added the external-contributor Indicates that a PR has been opened by someone outside the Warp team. label Jun 28, 2026
@oz-for-oss

oz-for-oss Bot commented Jun 28, 2026

Copy link
Copy Markdown
Contributor

@FurryR

I'm starting a first review of this pull request.

You can view the conversation on Warp.

I completed the review and no human review was requested for this pull request.

Comment /oz-review on this pull request to retrigger a review (up to 3 times on the same pull request).

Powered by Oz

oz-for-oss[bot]
oz-for-oss Bot previously requested changes Jun 28, 2026

@oz-for-oss oz-for-oss Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Overview

This PR adds a font-load-time check that removes file-backed fonts whose simple glyf flags use reserved bit 7 so CJK fallback can skip corrupted Linux fonts.

Concerns

  • The corruption check only inspects the first face returned by fontdb, so font collections can still load a corrupted requested face when it is not first.
  • The detector samples a small fixed set of glyphs and checks only the first flag byte in each sampled glyph, so it can miss fonts that still contain invalid simple-glyph flags.
  • This is a user-visible rendering fix, but the PR description has no screenshot or recording demonstrating CJK rendering before/after as required for user-visible changes.

Verdict

Found: 0 critical, 3 important, 0 suggestions

Request changes

Comment /oz-review on this pull request to retrigger a review (up to 3 times on the same pull request).

Powered by Oz

Comment thread crates/warpui/src/windowing/winit/fonts.rs Outdated
Comment thread crates/warpui/src/windowing/winit/fonts.rs Outdated
@FurryR

FurryR commented Jun 30, 2026

Copy link
Copy Markdown
Author
Image

Uploading a screenshot for verify. Left: after, Right: before

…etection for corrupted glyf tables

- Load-time check now iterates all fontdb_ids (not just first), correctly
  handling font collections (.ttc) where non-first faces may be corrupted.
- Add lazy runtime detection in swash rasterizer: track consecutive
  SwashCache::get_image_uncached failures per font; after 3 failures
  the font is removed from fontdb so future font fallback queries skip it.
- Add corrupted_fonts set and raster_failures counter to TextLayoutSystem.
- Short-circuit rasterization for confirmed-corrupted fonts.

Signed-off-by: FurryR <awathefox@gmail.com>
@FurryR

FurryR commented Jun 30, 2026

Copy link
Copy Markdown
Author

/oz-review

@oz-for-oss

oz-for-oss Bot commented Jun 30, 2026

Copy link
Copy Markdown
Contributor

@FurryR

I'm re-reviewing this pull request in response to a review request.

You can view the conversation on Warp.

I completed the review and no human review was requested for this pull request.

Comment /oz-review on this pull request to retrigger a review (up to 3 times on the same pull request).

Powered by Oz

oz-for-oss[bot]
oz-for-oss Bot previously requested changes Jun 30, 2026

@oz-for-oss oz-for-oss Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Overview

This PR adds Linux font filtering for corrupted glyf simple glyph flags and a runtime quarantine path for fonts that repeatedly fail swash rasterization, aiming to restore CJK fallback rendering when a bad DroidSansFallback face is installed.

Concerns

  • The load-time corruption detector is incomplete: it samples only a few glyph IDs and only inspects the first flag byte for each sampled glyph, so fonts with reserved bit 7 set elsewhere can still be accepted.
  • The runtime quarantine treats generic swash raster misses as evidence that an entire font is corrupted, which can remove valid fonts from fontdb and make future fallback skip them.
  • This is a user-facing rendering fix, but the PR description does not include screenshots or a screen recording demonstrating the before/after CJK rendering behavior end to end.

Verdict

Found: 0 critical, 3 important, 0 suggestions

Request changes

Comment /oz-review on this pull request to retrigger a review (up to 3 times on the same pull request).

Powered by Oz

Comment thread crates/warpui/src/windowing/winit/fonts.rs Outdated
Comment thread crates/warpui/src/windowing/winit/fonts/swash_rasterizer.rs Outdated
Fully parse all simple glyph flags (respecting repeat flag) at load time
for file-based fonts. Corrupted faces are removed from fontdb immediately
so they cannot be matched by future fallback queries.

Closes warpdotdev#9372
@FurryR

FurryR commented Jun 30, 2026

Copy link
Copy Markdown
Author

/oz-review

@oz-for-oss

oz-for-oss Bot commented Jun 30, 2026

Copy link
Copy Markdown
Contributor

@FurryR

I'm re-reviewing this pull request in response to a review request.

You can view the conversation on Warp.

I completed the review and no human review was requested for this pull request.

Comment /oz-review on this pull request to retrigger a review (up to 3 times on the same pull request).

Powered by Oz

oz-for-oss[bot]
oz-for-oss Bot previously requested changes Jun 30, 2026

@oz-for-oss oz-for-oss Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Overview

This PR attempts to reject or quarantine fonts whose simple glyph flags set reserved bit 7, so corrupted Linux fallback fonts do not cause CJK glyphs to render as missing-glyph squares.

Concerns

  • The swash rasterizer now calls corruption-tracking methods on TextLayoutSystem, but the PR does not add those methods or any backing state, so the changed code will not compile.
  • This is a user-visible font rendering fix, but the PR description does not include screenshots or a screen recording demonstrating the before/after behavior end to end. Repo guidance requires visual evidence for user-visible behavior changes.

Verdict

Found: 1 critical, 1 important, 0 suggestions

Request changes

Comment /oz-review on this pull request to retrigger a review (up to 3 times on the same pull request).

Powered by Oz

Comment thread crates/warpui/src/windowing/winit/fonts/swash_rasterizer.rs Outdated
@FurryR

FurryR commented Jun 30, 2026

Copy link
Copy Markdown
Author

/oz-review

@oz-for-oss

oz-for-oss Bot commented Jun 30, 2026

Copy link
Copy Markdown
Contributor

@FurryR

I'm re-reviewing this pull request in response to a review request.

You can view the conversation on Warp.

I completed the review and no human review was requested for this pull request.

Comment /oz-review on this pull request to retrigger a review (up to 3 times on the same pull request).

Powered by Oz

oz-for-oss[bot]
oz-for-oss Bot previously requested changes Jun 30, 2026

@oz-for-oss oz-for-oss Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Overview

This PR adds font-load-time detection for file-based fonts whose glyf simple glyph flags set reserved bit 7, then removes corrupted faces from the font database so fallback can select another font. No approved spec context was provided, and the security pass did not find a concrete issue in the changed diff.

Concerns

  • This is a user-visible text-rendering fix, but the PR does not include screenshots or a short recording demonstrating the before/after CJK rendering behavior. The repository review policy requires visual evidence for user-facing changes before approval.

Verdict

Found: 0 critical, 1 important, 0 suggestions

Request changes

Comment /oz-review on this pull request to retrigger a review (up to 3 times on the same pull request).

Powered by Oz

@FurryR

FurryR commented Jun 30, 2026

Copy link
Copy Markdown
Author
Image

Uploading a screenshot for verify. Left: after, Right: before

See the actual results here.

@FurryR

FurryR commented Jun 30, 2026

Copy link
Copy Markdown
Author

/oz-review Already attached a screenshot. Please reconsider.

@oz-for-oss

oz-for-oss Bot commented Jun 30, 2026

Copy link
Copy Markdown
Contributor

@FurryR

I'm re-reviewing this pull request in response to a review request.

You can view the conversation on Warp.

I completed the review and no human review was requested for this pull request.

Comment /oz-review on this pull request to retrigger a review (up to 3 times on the same pull request).

Powered by Oz

oz-for-oss[bot]
oz-for-oss Bot previously requested changes Jun 30, 2026

@oz-for-oss oz-for-oss Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Overview

This PR filters file-backed fonts during WarpUI font loading by scanning simple glyph flags for reserved bit 7 and removing corrupted faces so fallback can avoid fonts that swash/skrifa reject. No approved spec context was provided, and I did not find security-specific issues in the changed diff.

Concerns

  • This is a user-visible text-rendering change, but the PR description has no screenshot or screen recording attached and the screenshots/videos checkbox is left unchecked. For this user-facing change, please include screenshots or a short screen recording demonstrating the affected CJK fallback rendering working end to end.

Verdict

Found: 0 critical, 1 important, 0 suggestions

Request changes

Comment /oz-review on this pull request to retrigger a review (up to 3 times on the same pull request).

Powered by Oz

@FurryR

FurryR commented Jun 30, 2026

Copy link
Copy Markdown
Author

/oz-review

@oz-for-oss

oz-for-oss Bot commented Jun 30, 2026

Copy link
Copy Markdown
Contributor

This is your last /oz-review for the current 24-hour window. Your next slot opens in ~15h 14m.

@oz-for-oss

oz-for-oss Bot commented Jun 30, 2026

Copy link
Copy Markdown
Contributor

@FurryR

I'm re-reviewing this pull request in response to a review request.

You can view the conversation on Warp.

I reviewed this pull request and requested human review from: @vorporeal.

Comment /oz-review on this pull request to retrigger a review (up to 3 times on the same pull request).

Powered by Oz

@oz-for-oss oz-for-oss Bot dismissed stale reviews from themself July 1, 2026 00:02

Oz no longer requests changes for this pull request after the latest automated review.

- Cap count_font_faces TTC numFonts to available offset table entries to prevent
  denial-of-service from malformed font files with exaggerated face counts.
- Treat cached false values in BIT7_CHECKED_FONTS as corrupted instead of
  skipping them, preventing the background scanner from racing ahead and
  blocking removal of just-loaded corrupted faces.

Signed-off-by: FurryR <awathefox@gmail.com>
@FurryR

FurryR commented Jul 4, 2026

Copy link
Copy Markdown
Author

/oz-review

@oz-for-oss

oz-for-oss Bot commented Jul 4, 2026

Copy link
Copy Markdown
Contributor

@FurryR

I'm re-reviewing this pull request in response to a review request.

You can view the conversation on Warp.

I completed the review and no human review was requested for this pull request.

Comment /oz-review on this pull request to retrigger a review (up to 3 times on the same pull request).

Powered by Oz

oz-for-oss[bot]
oz-for-oss Bot previously requested changes Jul 4, 2026

@oz-for-oss oz-for-oss Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Overview

This PR adds detection for malformed TrueType simple glyph flags and removes corrupted font faces so font fallback can avoid fonts that cause CJK glyphs to render as .notdef squares.

Concerns

  • Removing corrupted faces does not update self.families, so later selection can still fall back to a removed FontId and panic when the ID is missing from font_id_map.

Verdict

Found: 0 critical, 1 important, 0 suggestions

Request changes

Comment /oz-review on this pull request to retrigger a review (up to 3 times on the same pull request).

Powered by Oz

Comment thread crates/warpui/src/windowing/winit/fonts.rs
When drain_corrupted_fonts removes a face from fontdb, also remove its
FontId from every family that references it, then drop families that
become empty. This prevents select_font from falling back to a stale
FontId after the face has been removed from fontdb, which would cause
a panic in build_attrs_list when looking up the ID in font_id_map.

Wrap families field in RwLock to support mutable access from the
&self drain_corrupted_fonts method.

Signed-off-by: FurryR <awathefox@gmail.com>
@FurryR

FurryR commented Jul 4, 2026

Copy link
Copy Markdown
Author

/oz-review

@oz-for-oss

oz-for-oss Bot commented Jul 4, 2026

Copy link
Copy Markdown
Contributor

@FurryR

I'm re-reviewing this pull request in response to a review request.

You can view the conversation on Warp.

I completed the review and no human review was requested for this pull request.

Comment /oz-review on this pull request to retrigger a review (up to 3 times on the same pull request).

Powered by Oz

oz-for-oss[bot]
oz-for-oss Bot previously requested changes Jul 4, 2026

@oz-for-oss oz-for-oss Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Overview

This PR filters corrupted glyf simple glyph fonts from the winit text layout font database so Linux fallback rendering can skip fonts that set reserved bit 7.

Concerns

  • The new families read lock can be held while fallback loading re-enters corrupted-font cleanup, which may require a families write lock and deadlock font selection when pending corrupted fonts are drained.

Verdict

Found: 0 critical, 1 important, 0 suggestions

Request changes

Comment /oz-review on this pull request to retrigger a review (up to 3 times on the same pull request).

Powered by Oz

Comment thread crates/warpui/src/windowing/winit/fonts.rs Outdated
FurryR added 3 commits July 4, 2026 12:56
select_font held the families read lock across load_fallback_fonts,
which can re-enter insert_font/drain_corrupted_fonts and deadlock
when drain_corrupted_fonts tries to acquire families.write().

Copy the family name and first font ID from the read guard, then
drop it before querying fontdb or loading fallbacks.

Signed-off-by: FurryR <awathefox@gmail.com>
Previously drain_corrupted_fonts removed the font_id_map entry before
cleaning the families map, creating a race window where select_font
could read a stale FontId from families that was no longer in
font_id_map, causing a panic in build_attrs_list.

Now: read font_id from font_id_map, clean families first, then remove
from font_id_map, so select_font can never return a FontId that is
absent from font_id_map.

Signed-off-by: FurryR <awathefox@gmail.com>
When drain_corrupted_fonts removes all faces for a family, that family
is deleted from the families map. If select_font is called for the
same family_id concurrently, it must not panic on the missing family.
Instead, fall back to any valid font ID already loaded.

Also clear font_selections for families that become empty, so stale
cached FontIds from deleted families are not reused.

Signed-off-by: FurryR <awathefox@gmail.com>
Keep the original panic behavior when a family is missing in select_font.
Remove the any_valid_font_id fallback that was over-engineering for a
race that cannot happen with single-threaded access.

Signed-off-by: FurryR <awathefox@gmail.com>
@FurryR

FurryR commented Jul 4, 2026

Copy link
Copy Markdown
Author

/oz-review

@oz-for-oss

oz-for-oss Bot commented Jul 4, 2026

Copy link
Copy Markdown
Contributor

This is your last /oz-review for the current 24-hour window. Your next slot opens in ~19h 58m.

@oz-for-oss

oz-for-oss Bot commented Jul 4, 2026

Copy link
Copy Markdown
Contributor

@FurryR

I'm re-reviewing this pull request in response to a review request.

You can view the conversation on Warp.

I reviewed this pull request and requested human review from: @vorporeal.

Comment /oz-review on this pull request to retrigger a review (up to 3 times on the same pull request).

Powered by Oz

@oz-for-oss oz-for-oss Bot dismissed stale reviews from themself July 4, 2026 05:32

Oz no longer requests changes for this pull request after the latest automated review.

@oz-for-oss oz-for-oss Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Overview

This PR adds a scanner for reserved bit 7 in simple glyf glyph flags and skips/removes corrupted file-backed fonts so Linux fallback can choose a working CJK font instead of rendering .notdef squares.

Concerns

  • The synchronous check now walks glyph flags for uncached file-backed faces on the font-load path; consider narrowing the blocking work if startup or fallback latency regresses on systems with large font collections.

Verdict

Found: 0 critical, 0 important, 1 suggestions

Approve with nits

Comment /oz-review on this pull request to retrigger a review (up to 3 times on the same pull request).

Powered by Oz

Comment thread crates/warpui/src/windowing/winit/fonts.rs
@oz-for-oss oz-for-oss Bot requested a review from vorporeal July 4, 2026 05:32
@FurryR

FurryR commented Jul 4, 2026

Copy link
Copy Markdown
Author
Image_1783151966901_657

Using Warp + IME without problems on Wayland with my custom patches; eager to see it merge.

@vorporeal

vorporeal commented Jul 7, 2026

Copy link
Copy Markdown
Contributor

For note:

After tracing the error chain in skrifa/swash, here is the exact failure path:

The Bug

DroidSansFallback.ttf has bit 7 (0x80) accidentally set on simple glyph coordinate flags in the glyf table. This is font data corruption, not an intentional cubic-Bezier marker.

Why it fails

  1. read-fonts v0.22.7 defines SimpleGlyphFlags::CUBIC = 0x80 (bit 7), following the glyf1 cubic outlines spec. This flag indicates an off-curve point belongs to a cubic Bezier segment.

  2. read_points_fast() in read-fonts/src/tables/glyf.rs:266 does:

    *point_flags = PointFlags::from_bits(point_flags.0);

    PointFlags::from_bits() masks with CURVE_MASK (0x81 = ON_CURVE | OFF_CURVE_CUBIC), so bit 7 is preserved.

  3. PointFlags::is_off_curve_cubic() returns true for any point where bit 7 is set.

  4. skrifa path generation in skrifa-0.22.3/src/outline/path.rs:160-162 rejects this:

    // We don't accept an off curve cubic as the first point
    if first_point.flags.is_off_curve_cubic() {
        return Err(ToPathError::ExpectedQuadOrOnCurve(0));
    }

    This returns ToPathErrorDrawError::ToPath, causing glyph.draw().is_ok() == false.

  5. swash returns None → cosmic_text swash_image() returns Noneswash_rasterizer.rs:98 .unwrap() panics.

Why Not Just Upgrade Dependencies

Upgrading skrifa to v0.43.2 or read-fonts to v0.40.2 will not fix this issue. The CUBIC flag definition and validation logic remain the same — bit 7 causes the same path generation rejection. The font data is genuinely corrupted.

The Current Workaround

The has_reserved_bit7_in_glyph_flags() function uses ttf-parser v0.25.1 (via owned_ttf_parser), which entirely ignores bit 7 (it only defines bits 0-5). So manually scanning for flag & 0x80 != 0 catches this specific corruption. This is correct for the immediate fix.

A More Robust Long-Term Solution

For future-proofing, we could replace the manual glyf table parsing with a skrifa-based validation that tries OutlineGlyph::draw() on each glyph at load time — this would catch any corruption that skrifa rejects, not just bit 7.

it sounds like ttf-parser is deprecated, and the general recommended replacement is skrifa. if we were to migrate to using skrifa for font parsing, would the font be rejected at load time (due to this error) or would it only be rejected at glyph rasterization time?

i ask because if it would reject at load time, that might be a better way to fix this, but if not, then this seems like the approach we need to take.

@FurryR

FurryR commented Jul 9, 2026

Copy link
Copy Markdown
Author

For note:
After tracing the error chain in skrifa/swash, here is the exact failure path:

The Bug

DroidSansFallback.ttf has bit 7 (0x80) accidentally set on simple glyph coordinate flags in the glyf table. This is font data corruption, not an intentional cubic-Bezier marker.

Why it fails

  1. read-fonts v0.22.7 defines SimpleGlyphFlags::CUBIC = 0x80 (bit 7), following the glyf1 cubic outlines spec. This flag indicates an off-curve point belongs to a cubic Bezier segment.

  2. read_points_fast() in read-fonts/src/tables/glyf.rs:266 does:

    *point_flags = PointFlags::from_bits(point_flags.0);

    PointFlags::from_bits() masks with CURVE_MASK (0x81 = ON_CURVE | OFF_CURVE_CUBIC), so bit 7 is preserved.

  3. PointFlags::is_off_curve_cubic() returns true for any point where bit 7 is set.

  4. skrifa path generation in skrifa-0.22.3/src/outline/path.rs:160-162 rejects this:

    // We don't accept an off curve cubic as the first point
    if first_point.flags.is_off_curve_cubic() {
        return Err(ToPathError::ExpectedQuadOrOnCurve(0));
    }

    This returns ToPathErrorDrawError::ToPath, causing glyph.draw().is_ok() == false.

  5. swash returns None → cosmic_text swash_image() returns Noneswash_rasterizer.rs:98 .unwrap() panics.

Why Not Just Upgrade Dependencies

Upgrading skrifa to v0.43.2 or read-fonts to v0.40.2 will not fix this issue. The CUBIC flag definition and validation logic remain the same — bit 7 causes the same path generation rejection. The font data is genuinely corrupted.

The Current Workaround

The has_reserved_bit7_in_glyph_flags() function uses ttf-parser v0.25.1 (via owned_ttf_parser), which entirely ignores bit 7 (it only defines bits 0-5). So manually scanning for flag & 0x80 != 0 catches this specific corruption. This is correct for the immediate fix.

A More Robust Long-Term Solution

For future-proofing, we could replace the manual glyf table parsing with a skrifa-based validation that tries OutlineGlyph::draw() on each glyph at load time — this would catch any corruption that skrifa rejects, not just bit 7.

it sounds like ttf-parser is deprecated, and the general recommended replacement is skrifa. if we were to migrate to using skrifa for font parsing, would the font be rejected at load time (due to this error) or would it only be rejected at glyph rasterization time?

i ask because if it would reject at load time, that might be a better way to fix this, but if not, then this seems like the approach we need to take.

The latter one. The PR has already added multi-threaded (partially) non-blocking scans against corrupted fonts so I guess current workaround would be fine, but eventually we may need to report this to upstream dependency.

@FurryR

FurryR commented Jul 12, 2026

Copy link
Copy Markdown
Author

Thanks for triggering CI. Working on formatting fixes.

@FurryR

FurryR commented Jul 12, 2026

Copy link
Copy Markdown
Author
image

Noticed another issue: Italic text is rendered as blocks, but that's unrelated to this issue. Will investigate separately.

Signed-off-by: FurryR <awathefox@gmail.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

cla-signed external-contributor Indicates that a PR has been opened by someone outside the Warp team.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Font rendering fails again

2 participants