aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar Ben Wagner <bungeman@google.com>2018-07-18 14:10:30 -0400
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2018-07-18 18:51:32 +0000
commit0afc75e7548bcb623132afa7cf7c8df179359151 (patch)
treeb8fc8769418fafeb3aee7c976ea172730ae9a569
parent715d08c381b4cc8af33d7dcdefc9533dcc97e4c9 (diff)
SkUTF16_CountUnichars to error instead of assert.
Update SkUTF16_CountUnichars to return -1 on invalid input instead of simply asserting in debug. This also removes the unneeded checks for zero length input. This also updates SkPaintPriv::ValidCountText and its documentation to reflect the reality that it returns -1 on invalid data. Bug: skia:8156 Change-Id: Ief227b7dec9d1e823b93e9061558f8412791fc09 Reviewed-on: https://skia-review.googlesource.com/142168 Reviewed-by: Hal Canary <halcanary@google.com> Commit-Queue: Ben Wagner <bungeman@google.com>
-rw-r--r--src/core/SkPaintPriv.cpp11
-rw-r--r--src/core/SkPaintPriv.h2
-rw-r--r--src/core/SkUtils.cpp14
3 files changed, 8 insertions, 19 deletions
diff --git a/src/core/SkPaintPriv.cpp b/src/core/SkPaintPriv.cpp
index 9cd5e4708d..3be1ebeafa 100644
--- a/src/core/SkPaintPriv.cpp
+++ b/src/core/SkPaintPriv.cpp
@@ -91,19 +91,16 @@ bool SkPaintPriv::ShouldDither(const SkPaint& p, SkColorType dstCT) {
}
int SkPaintPriv::ValidCountText(const void* text, size_t length, SkPaint::TextEncoding encoding) {
- if (length == 0) {
- return 0;
- }
switch (encoding) {
case SkPaint::kUTF8_TextEncoding: return SkUTF8_CountUnichars(text, length);
case SkPaint::kUTF16_TextEncoding: return SkUTF16_CountUnichars(text, length);
case SkPaint::kUTF32_TextEncoding: return SkUTF32_CountUnichars(text, length);
case SkPaint::kGlyphID_TextEncoding:
- if (SkIsAlign2(intptr_t(text)) && SkIsAlign2(length)) {
- return length >> 1;
+ if (!SkIsAlign2(intptr_t(text)) || !SkIsAlign2(length)) {
+ return -1;
}
- break;
+ return length >> 1;
}
- return 0;
+ return -1;
}
diff --git a/src/core/SkPaintPriv.h b/src/core/SkPaintPriv.h
index dbac69beb0..a5ee9a5e59 100644
--- a/src/core/SkPaintPriv.h
+++ b/src/core/SkPaintPriv.h
@@ -68,7 +68,7 @@ public:
static bool ShouldDither(const SkPaint&, SkColorType);
- // returns 0 if buffer is invalid for specified encoding
+ // returns -1 if buffer is invalid for specified encoding
static int ValidCountText(const void* text, size_t length, SkPaint::TextEncoding);
static SkTypeface* GetTypefaceOrDefault(const SkPaint& paint) {
diff --git a/src/core/SkUtils.cpp b/src/core/SkUtils.cpp
index c12bac50ff..f0c1f60a09 100644
--- a/src/core/SkUtils.cpp
+++ b/src/core/SkUtils.cpp
@@ -86,10 +86,6 @@ int SkUTF8_CountUnichars(const char utf8[]) {
int SkUTF8_CountUnichars(const void* text, size_t byteLength) {
SkASSERT(text);
const char* utf8 = static_cast<const char*>(text);
- if (byteLength == 0) {
- return 0;
- }
-
int count = 0;
const char* stop = utf8 + byteLength;
@@ -262,9 +258,6 @@ int SkUTF16_CountUnichars(const uint16_t src[]) {
// returns -1 on error
int SkUTF16_CountUnichars(const void* text, size_t byteLength) {
SkASSERT(text);
- if (byteLength == 0) {
- return 0;
- }
if (!SkIsAlign2(intptr_t(text)) || !SkIsAlign2(byteLength)) {
return -1;
}
@@ -274,7 +267,9 @@ int SkUTF16_CountUnichars(const void* text, size_t byteLength) {
int count = 0;
while (src < stop) {
unsigned c = *src++;
- SkASSERT(!SkUTF16_IsLowSurrogate(c));
+ if (SkUTF16_IsLowSurrogate(c)) {
+ return -1;
+ }
if (SkUTF16_IsHighSurrogate(c)) {
if (src >= stop) {
return -1;
@@ -405,9 +400,6 @@ size_t SkUTF16_ToUTF8(const uint16_t utf16[], int numberOf16BitValues,
// returns -1 on error
int SkUTF32_CountUnichars(const void* text, size_t byteLength) {
- if (byteLength == 0) {
- return 0;
- }
if (!SkIsAlign4(intptr_t(text)) || !SkIsAlign4(byteLength)) {
return -1;
}