summaryrefslogtreecommitdiffstats
path: root/libs/minikin/Layout.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'libs/minikin/Layout.cpp')
-rw-r--r--libs/minikin/Layout.cpp6
1 files changed, 6 insertions, 0 deletions
diff --git a/libs/minikin/Layout.cpp b/libs/minikin/Layout.cpp
index 01b6599..21b8362 100644
--- a/libs/minikin/Layout.cpp
+++ b/libs/minikin/Layout.cpp
@@ -258,6 +258,12 @@ static hb_bool_t harfbuzzGetGlyph(hb_font_t* hbFont, void* fontData, hb_codepoin
MinikinPaint* paint = reinterpret_cast<MinikinPaint*>(fontData);
MinikinFont* font = paint->font;
uint32_t glyph_id;
+ /* HarfBuzz replaces broken input codepoints with (unsigned int) -1.
+ * Skia expects valid Unicode.
+ * Replace invalid codepoints with U+FFFD REPLACEMENT CHARACTER.
+ */
+ if (unicode > 0x10FFFF)
+ unicode = 0xFFFD;
bool ok = font->GetGlyph(unicode, &glyph_id);
if (ok) {
*glyph = glyph_id;