diff options
Diffstat (limited to 'chromium/third_party/skia/src/gpu/ops/GrAAConvexPathRenderer.cpp')
-rw-r--r-- | chromium/third_party/skia/src/gpu/ops/GrAAConvexPathRenderer.cpp | 22 |
1 files changed, 14 insertions, 8 deletions
diff --git a/chromium/third_party/skia/src/gpu/ops/GrAAConvexPathRenderer.cpp b/chromium/third_party/skia/src/gpu/ops/GrAAConvexPathRenderer.cpp index badaadd329a..6ce8607d947 100644 --- a/chromium/third_party/skia/src/gpu/ops/GrAAConvexPathRenderer.cpp +++ b/chromium/third_party/skia/src/gpu/ops/GrAAConvexPathRenderer.cpp @@ -22,6 +22,7 @@ #include "SkPointPriv.h" #include "SkString.h" #include "SkTraceEvent.h" +#include "SkTypes.h" #include "glsl/GrGLSLFragmentShaderBuilder.h" #include "glsl/GrGLSLGeometryProcessor.h" #include "glsl/GrGLSLProgramDataManager.h" @@ -130,8 +131,8 @@ static void compute_vectors(SegmentArray* segments, normSide = SkPointPriv::kLeft_Side; } - *vCount = 0; - *iCount = 0; + int64_t vCount64 = 0; + int64_t iCount64 = 0; // compute normals at all points for (int a = 0; a < count; ++a) { Segment& sega = (*segments)[a]; @@ -147,11 +148,11 @@ static void compute_vectors(SegmentArray* segments, prevPt = &segb.fPts[p]; } if (Segment::kLine == segb.fType) { - *vCount += 5; - *iCount += 9; + vCount64 += 5; + iCount64 += 9; } else { - *vCount += 6; - *iCount += 12; + vCount64 += 6; + iCount64 += 12; } } @@ -164,9 +165,14 @@ static void compute_vectors(SegmentArray* segments, segb.fMid = segb.fNorms[0] + sega.endNorm(); segb.fMid.normalize(); // corner wedges - *vCount += 4; - *iCount += 6; + vCount64 += 4; + iCount64 += 6; } + if (vCount64 > SK_MaxS32 || iCount64 > SK_MaxS32) { + return; + } + *vCount = vCount64; + *iCount = iCount64; } struct DegenerateTestData { |