aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/core/SkFindAndPlaceGlyph.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/core/SkFindAndPlaceGlyph.h')
-rw-r--r--src/core/SkFindAndPlaceGlyph.h24
1 files changed, 13 insertions, 11 deletions
diff --git a/src/core/SkFindAndPlaceGlyph.h b/src/core/SkFindAndPlaceGlyph.h
index f602e8d931..74fa516910 100644
--- a/src/core/SkFindAndPlaceGlyph.h
+++ b/src/core/SkFindAndPlaceGlyph.h
@@ -147,7 +147,7 @@ private:
private:
SkUnichar nextUnichar(const char** text, const char* stop) override {
- return SkUTF8_NextUnichar(text, stop);
+ return SkUTF::NextUTF8(text, stop);
}
};
@@ -157,7 +157,7 @@ private:
private:
SkUnichar nextUnichar(const char** text, const char* stop) override {
- return SkUTF16_NextUnichar((const uint16_t**)text, (const uint16_t*)stop);
+ return SkUTF::NextUTF16((const uint16_t**)text, (const uint16_t*)stop);
}
};
@@ -167,10 +167,7 @@ private:
private:
SkUnichar nextUnichar(const char** text, const char* stop) override {
- const int32_t* ptr = *(const int32_t**)text;
- SkUnichar uni = *ptr++;
- *text = (const char*)ptr;
- return uni;
+ return SkUTF::NextUTF32((const int32_t**)text, (const int32_t*)stop);
}
};
@@ -181,19 +178,24 @@ private:
SkASSERT(cache != nullptr);
}
- const SkGlyph& lookupGlyph(const char** text, const char*) override {
- return fCache->getGlyphIDMetrics(nextGlyphId(text));
+ const SkGlyph& lookupGlyph(const char** text, const char* stop) override {
+ return fCache->getGlyphIDMetrics(nextGlyphId(text, stop));
}
- const SkGlyph& lookupGlyphXY(const char** text, const char*,
+ const SkGlyph& lookupGlyphXY(const char** text, const char* stop,
SkFixed x, SkFixed y) override {
- return fCache->getGlyphIDMetrics(nextGlyphId(text), x, y);
+ return fCache->getGlyphIDMetrics(nextGlyphId(text, stop), x, y);
}
private:
- uint16_t nextGlyphId(const char** text) {
+ uint16_t nextGlyphId(const char** text, const char* stop) {
SkASSERT(text != nullptr);
const uint16_t* ptr = *(const uint16_t**)text;
+ SkASSERT(ptr);
+ if (ptr + 1 > (const uint16_t*)stop) {
+ *text = stop;
+ return 0;
+ }
uint16_t glyphID = *ptr;
ptr += 1;
*text = (const char*)ptr;