From 52314f82ba8696e957e70eabde672b6470fedf7a Mon Sep 17 00:00:00 2001 From: "reed@google.com" Date: Thu, 21 Nov 2013 21:05:06 +0000 Subject: move SkProcCoeffXfermode unflatten constructor into .cpp, and range-check its mode BUG= Review URL: https://codereview.chromium.org/79543009 git-svn-id: http://skia.googlecode.com/svn/trunk@12355 2bbb7eff-a529-9590-31e7-b0007b416f81 --- src/core/SkXfermode.cpp | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) (limited to 'src/core/SkXfermode.cpp') diff --git a/src/core/SkXfermode.cpp b/src/core/SkXfermode.cpp index a22035e804..3cb03703bb 100644 --- a/src/core/SkXfermode.cpp +++ b/src/core/SkXfermode.cpp @@ -1343,6 +1343,22 @@ GrEffectRef* XferEffect::TestCreate(SkRandom* rand, /////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////// +SkProcCoeffXfermode::SkProcCoeffXfermode(SkFlattenableReadBuffer& buffer) : INHERITED(buffer) { + uint32_t mode32 = buffer.read32() % SK_ARRAY_COUNT(gProcCoeffs); + if (mode32 >= SK_ARRAY_COUNT(gProcCoeffs)) { + // out of range, just set to something harmless + mode32 = SkXfermode::kSrcOut_Mode; + } + fMode = (SkXfermode::Mode)mode32; + + const ProcCoeff& rec = gProcCoeffs[fMode]; + // these may be valid, or may be CANNOT_USE_COEFF + fSrcCoeff = rec.fSC; + fDstCoeff = rec.fDC; + // now update our function-ptr in the super class + this->INHERITED::setProc(rec.fProc); +} + bool SkProcCoeffXfermode::asMode(Mode* mode) const { if (mode) { *mode = fMode; -- cgit v1.2.3