From f2d35d204b1f9a25cd11db87a34099d722f494a2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Henrik=20Rydg=C3=A5rd?= Date: Fri, 11 Apr 2025 10:50:56 +0200 Subject: [PATCH] SDL text renderer: Add some sanity checks. --- Common/Render/Text/draw_text_sdl.cpp | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/Common/Render/Text/draw_text_sdl.cpp b/Common/Render/Text/draw_text_sdl.cpp index 2d5356fc0e..f3612ad965 100644 --- a/Common/Render/Text/draw_text_sdl.cpp +++ b/Common/Render/Text/draw_text_sdl.cpp @@ -187,7 +187,12 @@ void TextDrawerSDL::PrepareFallbackFonts(std::string_view locale) { } uint32_t TextDrawerSDL::CheckMissingGlyph(std::string_view text) { - TTF_Font *font = fontMap_.find(fontHash_)->second; + auto iter = fontMap_.find(fontHash_); + if (iter == fontMap_.end()) { + return 0; + } + + TTF_Font *font = iter->second; UTF8 utf8Decoded(text); uint32_t missingGlyph = 0; @@ -285,7 +290,7 @@ void TextDrawerSDL::MeasureStringInternal(std::string_view str, float *w, float if (missingGlyph) { int fallbackFont = FindFallbackFonts(missingGlyph, ptSize); - if (fallbackFont >= 0) { + if (fallbackFont >= 0 && fallbackFont < (int)fallbackFonts_.size()) { font = fallbackFonts_[fallbackFont]; } } @@ -319,14 +324,20 @@ bool TextDrawerSDL::DrawStringBitmap(std::vector &bitmapData, TextStrin processedStr.push_back(' '); } - TTF_Font *font = fontMap_.find(fontHash_)->second; + auto fontIter = fontMap_.find(fontHash_); + if (fontIter == fontMap_.end()) { + ERROR_LOG(Log::G3D, "Font hash not in map: %08x", fontHash_); + return false; + } + + TTF_Font *font = fontIter->second; int ptSize = TTF_FontHeight(font) / 1.35; uint32_t missingGlyph = CheckMissingGlyph(processedStr); if (missingGlyph) { int fallbackFont = FindFallbackFonts(missingGlyph, ptSize); - if (fallbackFont >= 0) { + if (fallbackFont >= 0 && fallbackFont < (int)fallbackFonts_.size()) { font = fallbackFonts_[fallbackFont]; } }