diff options
author | Khushal <khushalsagar@chromium.org> | 2018-05-16 16:07:24 -0700 |
---|---|---|
committer | Skia Commit-Bot <skia-commit-bot@chromium.org> | 2018-05-17 20:01:53 +0000 |
commit | 2d2fedd25de02aba20f5078e74df92b2d25b799c (patch) | |
tree | 792ba59606dc0688c04394fc2b840c3ee4e78904 /src | |
parent | 53ea91139ad9f5ec32fba2cfd167277a5cc3f443 (diff) |
fonts: Use empty glyphs on cache miss.
In case of a cache miss, we end up using a glyph with garbage memory
which can result in arbitrary memory allocations for generating images
for these glyphs. Use empty glyphs instead.
R=herb@google.com
Bug: skia:7913
Change-Id: Ie81b006a6872e077f9fd37e0a5751750c66f9ecb
Reviewed-on: https://skia-review.googlesource.com/128701
Reviewed-by: Herb Derby <herb@google.com>
Commit-Queue: Khusal Sagar <khushalsagar@chromium.org>
Diffstat (limited to 'src')
-rw-r--r-- | src/core/SkRemoteGlyphCache.cpp | 4 | ||||
-rw-r--r-- | src/core/SkTypeface_remote.cpp | 2 |
2 files changed, 5 insertions, 1 deletions
diff --git a/src/core/SkRemoteGlyphCache.cpp b/src/core/SkRemoteGlyphCache.cpp index 5e21f8f292..985c0655e6 100644 --- a/src/core/SkRemoteGlyphCache.cpp +++ b/src/core/SkRemoteGlyphCache.cpp @@ -700,6 +700,8 @@ void SkStrikeClient::generateFontMetrics(const SkTypefaceProxy& typefaceProxy, SkDebugf("generateFontMetrics: %s\n", rec.dump().c_str()); SkStrikeCache::Dump(); SkDEBUGFAIL("GlyphCacheMiss"); + + sk_bzero(metrics, sizeof(*metrics)); } void SkStrikeClient::generateMetricsAndImage(const SkTypefaceProxy& typefaceProxy, @@ -710,6 +712,8 @@ void SkStrikeClient::generateMetricsAndImage(const SkTypefaceProxy& typefaceProx SkDebugf("generateMetricsAndImage: %s\n", rec.dump().c_str()); SkStrikeCache::Dump(); SkDEBUGFAIL("GlyphCacheMiss"); + + glyph->zeroMetrics(); } void SkStrikeClient::generatePath(const SkTypefaceProxy& typefaceProxy, diff --git a/src/core/SkTypeface_remote.cpp b/src/core/SkTypeface_remote.cpp index 3b58af9366..fe3fde83f5 100644 --- a/src/core/SkTypeface_remote.cpp +++ b/src/core/SkTypeface_remote.cpp @@ -39,7 +39,7 @@ void SkScalerContextProxy::generateImage(const SkGlyph& glyph) { bool SkScalerContextProxy::generatePath(SkGlyphID glyphID, SkPath* path) { fClient->generatePath(*this->typefaceProxy(), this->getRec(), glyphID, path); - return true; + return false; } void SkScalerContextProxy::generateFontMetrics(SkPaint::FontMetrics* metrics) { |