From 2ff8debe8c607c90a9fa7df29577a24967b00cf9 Mon Sep 17 00:00:00 2001 From: MrLetsplay2003 Date: Fri, 15 Sep 2023 21:34:11 +0200 Subject: [PATCH] Fix segmentation fault in Font loading --- src/kekengine/cpp/render/fonts.cpp | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/kekengine/cpp/render/fonts.cpp b/src/kekengine/cpp/render/fonts.cpp index 2e8cd5c..6e9d847 100644 --- a/src/kekengine/cpp/render/fonts.cpp +++ b/src/kekengine/cpp/render/fonts.cpp @@ -248,11 +248,13 @@ CharacterBlock Font::generateCharacterBlock(unsigned int block) { int col = c % KEK_FONT_BITMAP_WIDTH_BLOCKS; int row = c / KEK_FONT_BITMAP_WIDTH_BLOCKS; - for(unsigned int r = 0; r < face->glyph->bitmap.rows; r++) { - memcpy( - textureBytes + row * KEK_FONT_RESOLUTION * KEK_FONT_BITMAP_WIDTH + col * KEK_FONT_RESOLUTION + r * KEK_FONT_BITMAP_WIDTH, + // TODO: handle wide characters more gracefully + for(unsigned int r = 0; r < std::min(64u, face->glyph->bitmap.rows); r++) { + size_t offset = row * KEK_FONT_RESOLUTION * KEK_FONT_BITMAP_WIDTH + col * KEK_FONT_RESOLUTION + r * KEK_FONT_BITMAP_WIDTH; + size_t len = face->glyph->bitmap.width; + memcpy(textureBytes + offset, face->glyph->bitmap.buffer + r * face->glyph->bitmap.width, - face->glyph->bitmap.width); + len); } Character ch;