Limit offset range when fuzzing SkOffsetSimplePolygon
Bug: oss-fuzz:43699 Change-Id: Ie856aed03b513a4ea84a09deda6a05b95b086b07 Reviewed-on: https://skia-review.googlesource.com/c/skia/+/496876 Reviewed-by: Michael Ludwig <michaelludwig@google.com> Commit-Queue: Jim Van Verth <jvanverth@google.com>
This commit is contained in:
parent
42bfd747a7
commit
62bb436301
@ -44,7 +44,9 @@ DEF_FUZZ(PolyUtils, fuzz) {
|
|||||||
|
|
||||||
if (isSimple) {
|
if (isSimple) {
|
||||||
SkScalar offset;
|
SkScalar offset;
|
||||||
fuzz->next(&offset);
|
// Limit this to prevent timeouts.
|
||||||
|
// This should be fine, as this is roughly the range we expect from the shadow algorithm.
|
||||||
|
fuzz->nextRange(&offset, -1000, 1000);
|
||||||
ignoreResult(SkOffsetSimplePolygon(polygon, count, bounds, offset, &output));
|
ignoreResult(SkOffsetSimplePolygon(polygon, count, bounds, offset, &output));
|
||||||
|
|
||||||
SkAutoSTMalloc<64, uint16_t> indexMap(count);
|
SkAutoSTMalloc<64, uint16_t> indexMap(count);
|
||||||
|
@ -13,6 +13,7 @@
|
|||||||
#include "include/private/SkTArray.h"
|
#include "include/private/SkTArray.h"
|
||||||
#include "include/private/SkTemplates.h"
|
#include "include/private/SkTemplates.h"
|
||||||
#include "src/core/SkPointPriv.h"
|
#include "src/core/SkPointPriv.h"
|
||||||
|
#include "src/core/SkRectPriv.h"
|
||||||
#include "src/core/SkTDPQueue.h"
|
#include "src/core/SkTDPQueue.h"
|
||||||
#include "src/core/SkTInternalLList.h"
|
#include "src/core/SkTInternalLList.h"
|
||||||
|
|
||||||
@ -1179,8 +1180,8 @@ bool SkOffsetSimplePolygon(const SkPoint* inputPolygonVerts, int inputPolygonSiz
|
|||||||
}
|
}
|
||||||
|
|
||||||
// can't inset more than the half bounds of the polygon
|
// can't inset more than the half bounds of the polygon
|
||||||
if (offset > std::min(SkTAbs(SK_ScalarHalf*bounds.width()),
|
if (offset > std::min(SkTAbs(SkRectPriv::HalfWidth(bounds)),
|
||||||
SkTAbs(SK_ScalarHalf*bounds.height()))) {
|
SkTAbs(SkRectPriv::HalfHeight(bounds)))) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -13,6 +13,7 @@
|
|||||||
#include "src/core/SkDrawShadowInfo.h"
|
#include "src/core/SkDrawShadowInfo.h"
|
||||||
#include "src/core/SkGeometry.h"
|
#include "src/core/SkGeometry.h"
|
||||||
#include "src/core/SkPointPriv.h"
|
#include "src/core/SkPointPriv.h"
|
||||||
|
#include "src/core/SkRectPriv.h"
|
||||||
#include "src/utils/SkPolyUtils.h"
|
#include "src/utils/SkPolyUtils.h"
|
||||||
#include "src/utils/SkShadowTessellator.h"
|
#include "src/utils/SkShadowTessellator.h"
|
||||||
|
|
||||||
@ -555,6 +556,9 @@ bool SkBaseShadowTessellator::computeConcaveShadow(SkScalar inset, SkScalar outs
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// shouldn't inset more than the half bounds of the polygon
|
||||||
|
inset = std::min(inset, std::min(SkTAbs(SkRectPriv::HalfWidth(fPathBounds)),
|
||||||
|
SkTAbs(SkRectPriv::HalfHeight(fPathBounds))));
|
||||||
// generate inner ring
|
// generate inner ring
|
||||||
SkTDArray<SkPoint> umbraPolygon;
|
SkTDArray<SkPoint> umbraPolygon;
|
||||||
SkTDArray<int> umbraIndices;
|
SkTDArray<int> umbraIndices;
|
||||||
@ -910,8 +914,6 @@ SkAmbientShadowTessellator::SkAmbientShadowTessellator(const SkPath& path,
|
|||||||
// umbraColor is the interior value, penumbraColor the exterior value.
|
// umbraColor is the interior value, penumbraColor the exterior value.
|
||||||
auto outset = SkDrawShadowMetrics::AmbientBlurRadius(baseZ);
|
auto outset = SkDrawShadowMetrics::AmbientBlurRadius(baseZ);
|
||||||
auto inset = outset * SkDrawShadowMetrics::AmbientRecipAlpha(baseZ) - outset;
|
auto inset = outset * SkDrawShadowMetrics::AmbientRecipAlpha(baseZ) - outset;
|
||||||
inset = SkTPin(inset, 0.0f, std::min(path.getBounds().width(),
|
|
||||||
path.getBounds().height()));
|
|
||||||
|
|
||||||
if (!this->computePathPolygon(path, ctm)) {
|
if (!this->computePathPolygon(path, ctm)) {
|
||||||
return;
|
return;
|
||||||
|
Loading…
Reference in New Issue
Block a user