summaryrefslogtreecommitdiffstats
path: root/chromium/third_party/skia/src/gpu/ops/GrAAConvexPathRenderer.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/third_party/skia/src/gpu/ops/GrAAConvexPathRenderer.cpp')
-rw-r--r--chromium/third_party/skia/src/gpu/ops/GrAAConvexPathRenderer.cpp22
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 {