From 0afc75e7548bcb623132afa7cf7c8df179359151 Mon Sep 17 00:00:00 2001 From: Ben Wagner Date: Wed, 18 Jul 2018 14:10:30 -0400 Subject: 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 Commit-Queue: Ben Wagner --- src/core/SkPaintPriv.cpp | 11 ++++------- src/core/SkPaintPriv.h | 2 +- src/core/SkUtils.cpp | 14 +++----------- 3 files changed, 8 insertions(+), 19 deletions(-) (limited to 'src/core') 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(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; } -- cgit v1.2.3