fix conic fuzz
Avoid divide by zero in conic divide.
If the control point z value is zero, resulting
conic will have no weight, and control point value
will not affect conic; so any non-zero value will
work to avoid the zero divide.
R=kjlubick@google.com
Bug: oss-fuzz:10157
Change-Id: Ia0456ff6028559b4e1040725fea5f8bf4717e192
Reviewed-on: https://skia-review.googlesource.com/155320
Reviewed-by: Kevin Lubick <kjlubick@google.com>
Auto-Submit: Cary Clark <caryclark@skia.org>
Commit-Queue: Kevin Lubick <kjlubick@google.com>
diff --git a/src/pathops/SkPathOpsConic.cpp b/src/pathops/SkPathOpsConic.cpp
index 82f3a7b..ced3809 100644
--- a/src/pathops/SkPathOpsConic.cpp
+++ b/src/pathops/SkPathOpsConic.cpp
@@ -156,6 +156,9 @@
double bx = 2 * dx - (ax + cx) / 2;
double by = 2 * dy - (ay + cy) / 2;
double bz = 2 * dz - (az + cz) / 2;
+ if (!bz) {
+ bz = 1; // if bz is 0, weight is 0, control point has no effect: any value will do
+ }
SkDConic dst = {{{{ax / az, ay / az}, {bx / bz, by / bz}, {cx / cz, cy / cz}}
SkDEBUGPARAMS(fPts.fDebugGlobalState) },
SkDoubleToScalar(bz / sqrt(az * cz)) };