From 796ed46d12499d16b451c6af37895c37c642a655 Mon Sep 17 00:00:00 2001 From: Daniel Hammer Date: Sat, 18 Jul 2026 10:21:22 +0200 Subject: [PATCH] fix: fix Font Preview crash if opened manually --- programs/include/gui/truetype.hpp | 5 ++++- programs/src/fontpreview/main.cpp | 9 +++++++-- programs/src/fontpreview/manifest.toml | 6 ++++++ 3 files changed, 17 insertions(+), 3 deletions(-) diff --git a/programs/include/gui/truetype.hpp b/programs/include/gui/truetype.hpp index 90ac56c..853a432 100644 --- a/programs/include/gui/truetype.hpp +++ b/programs/include/gui/truetype.hpp @@ -124,7 +124,10 @@ struct TrueTypeFont { montauk::read(fd, data, 0, size); montauk::close(fd); - if (!stbtt_InitFont(&info, data, stbtt_GetFontOffsetForIndex(data, 0))) { + // stbtt_GetFontOffsetForIndex returns -1 for non-font data; passing + // that into stbtt_InitFont makes it dereference data + (uint32)-1. + int off = stbtt_GetFontOffsetForIndex(data, 0); + if (off < 0 || !stbtt_InitFont(&info, data, off)) { montauk::free(data); data = nullptr; return false; diff --git a/programs/src/fontpreview/main.cpp b/programs/src/fontpreview/main.cpp index 44b2bc1..54bc128 100644 --- a/programs/src/fontpreview/main.cpp +++ b/programs/src/fontpreview/main.cpp @@ -345,8 +345,13 @@ extern "C" void _start() { g_preview_data = (uint8_t*)montauk::malloc(size); if (g_preview_data) { montauk::read(fd, g_preview_data, 0, size); - if (stbtt_InitFont(&g_preview_info, g_preview_data, - stbtt_GetFontOffsetForIndex(g_preview_data, 0))) { + // stbtt_GetFontOffsetForIndex returns -1 for anything that + // isn't a valid font (e.g. a directory or arbitrary file). + // Passing that -1 into stbtt_InitFont makes it read at + // data + (uint32)-1, faulting. Guard against it. + int off = stbtt_GetFontOffsetForIndex(g_preview_data, 0); + if (off >= 0 && + stbtt_InitFont(&g_preview_info, g_preview_data, off)) { g_load_ok = true; } } diff --git a/programs/src/fontpreview/manifest.toml b/programs/src/fontpreview/manifest.toml index d5112b8..527178e 100644 --- a/programs/src/fontpreview/manifest.toml +++ b/programs/src/fontpreview/manifest.toml @@ -6,3 +6,9 @@ icon = "font-viewer.svg" [menu] category = "Applications" visible = false + +[launch] +# Font Preview only opens an explicit font file; it has no use for a +# starting directory. Don't hand it home_dir when launched from the Apps +# folder (it would try to parse the directory path as a font). +pass_home_dir = false