diff options
author | 2017-04-06 22:26:56 -0400 | |
---|---|---|
committer | 2017-04-07 14:12:36 +0000 | |
commit | 3390cdfef8c0ad1f04810a4bb1e98a04e3d56a1a (patch) | |
tree | 4243f087e6fbb05148e06a0a5eec8318a02d10cb | |
parent | ca878ccfb5d514b4e7baea9e6d410b0085211b40 (diff) |
SkTypeface_win_dw: populate_glyph_to_unicode uses lowest unichar
BUG=chromium:538133
BUG=chromium:359065
Change-Id: I8208efc63579e0f1ebb77680beae2cd08cdba547
Reviewed-on: https://skia-review.googlesource.com/11681
Reviewed-by: Mike Klein <mtklein@chromium.org>
Commit-Queue: Hal Canary <halcanary@google.com>
-rw-r--r-- | src/ports/SkTypeface_win_dw.cpp | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/src/ports/SkTypeface_win_dw.cpp b/src/ports/SkTypeface_win_dw.cpp index 7d18da9d5a..42d1319fbb 100644 --- a/src/ports/SkTypeface_win_dw.cpp +++ b/src/ports/SkTypeface_win_dw.cpp @@ -297,7 +297,8 @@ static void populate_glyph_to_unicode(IDWriteFontFace* fontFace, const unsigned glyphCount, SkTDArray<SkUnichar>* glyphToUnicode) { //Do this like free type instead - SkAutoTMalloc<SkUnichar> glyphToUni(glyphCount); + SkAutoTMalloc<SkUnichar> glyphToUni( + (SkUnichar*)sk_calloc_throw(sizeof(SkUnichar) * glyphCount)); int maxGlyph = -1; for (UINT32 c = 0; c < 0x10FFFF; ++c) { UINT16 glyph = 0; @@ -309,10 +310,11 @@ static void populate_glyph_to_unicode(IDWriteFontFace* fontFace, } if (0 < glyph) { maxGlyph = SkTMax(static_cast<int>(glyph), maxGlyph); - glyphToUni[glyph] = c; + if (glyphToUni[glyph] == 0) { + glyphToUni[glyph] = c; // Always use lowest-index unichar. + } } } - SkTDArray<SkUnichar>(glyphToUni, maxGlyph + 1).swap(*glyphToUnicode); } |