Fix SkXfermode deserialization.

Validation was failing due to an inverted test condition.

BUG=417266
R=reed@google.com

Author: senorblanco@chromium.org

Review URL: https://codereview.chromium.org/596333002
This commit is contained in:
senorblanco 2014-09-24 11:09:38 -07:00 committed by Commit bot
parent 7b09aab713
commit 0f7197bc0d
2 changed files with 19 additions and 1 deletions

View File

@ -1258,7 +1258,7 @@ SkProcCoeffXfermode::SkProcCoeffXfermode(SkReadBuffer& buffer) : INHERITED(buffe
SkFlattenable* SkProcCoeffXfermode::CreateProc(SkReadBuffer& buffer) {
uint32_t mode32 = buffer.read32();
if (!buffer.validate(mode32 >= SK_ARRAY_COUNT(gProcCoeffs))) {
if (!buffer.validate(mode32 < SK_ARRAY_COUNT(gProcCoeffs))) {
return NULL;
}
return SkXfermode::Create((SkXfermode::Mode)mode32);

View File

@ -261,6 +261,19 @@ static void TestBitmapSerialization(const SkBitmap& validBitmap,
}
}
static void TestXfermodeSerialization(skiatest::Reporter* reporter) {
for (size_t i = 0; i <= SkXfermode::kLastMode; ++i) {
if (i == SkXfermode::kSrcOver_Mode) {
// skip SrcOver, as it is allowed to return NULL from Create()
continue;
}
SkAutoTUnref<SkXfermode> mode(SkXfermode::Create(static_cast<SkXfermode::Mode>(i)));
REPORTER_ASSERT(reporter, mode.get());
SkAutoTUnref<SkXfermode> copy(
TestFlattenableSerialization<SkXfermode>(mode.get(), true, reporter));
}
}
static SkBitmap draw_picture(SkPicture& picture) {
SkBitmap bitmap;
bitmap.allocN32Pixels(SkScalarCeilToInt(picture.cullRect().width()),
@ -406,6 +419,11 @@ DEF_TEST(Serialization, reporter) {
TestObjectSerialization(&region, reporter);
}
// Test xfermode serialization
{
TestXfermodeSerialization(reporter);
}
// Test string serialization
{
SkString string("string");