879dab87ab
This was originally a reland of "Fix div-by-zero loophole in gradient factory func", c34dd6c526
, but:
The change caused blink layout tests when encountering very small or zero radii. The original patch switched the order of checking if the radii are equal and if the start radius was 0. In the case where both radii are 0, the original code created an actual radial gradient of radius 0 and the new code rejected the shader. A radial gradient with radius of 0 properly renders the last border color as a fill.
This made me realize that the case when the center positions and the radii are the same can be handled more correctly than just always returning an empty shader, so the fix now applies simplifications to the gradient definition depending on the tile mode and should not trigger any blink tests. I added a row to the gradient edge cases GM to make sure it degrades gracefully.
Original change's description:
> Fix div-by-zero loophole in gradient factory func
>
> Bug: oss-fuzz:10373
> Change-Id: I4277fb63e3186ee34feaf09ecf6aeddeb532f9c1
> Reviewed-on: https://skia-review.googlesource.com/c/168269
> Reviewed-by: Kevin Lubick <kjlubick@google.com>
> Commit-Queue: Michael Ludwig <michaelludwig@google.com>
Docs-Preview: https://skia.org/?cl=168487
Bug: oss-fuzz:10373
Change-Id: Ib0a6e7f807560a5dcf24d1c8e0146817af2d9606
Reviewed-on: https://skia-review.googlesource.com/c/168487
Reviewed-by: Mike Reed <reed@google.com>
Reviewed-by: Florin Malita <fmalita@chromium.org>
Commit-Queue: Michael Ludwig <michaelludwig@google.com>
353 lines
9.4 KiB
Plaintext
353 lines
9.4 KiB
Plaintext
# Copyright 2016 Google Inc.
|
|
#
|
|
# Use of this source code is governed by a BSD-style license that can be
|
|
# found in the LICENSE file.
|
|
|
|
# Things are easiest for everyone if these source paths are absolute.
|
|
_gm = get_path_info("../gm", "abspath")
|
|
|
|
gm_sources = [
|
|
"$_gm/3dgm.cpp",
|
|
"$_gm/aaa.cpp",
|
|
"$_gm/aaclip.cpp",
|
|
"$_gm/aarectmodes.cpp",
|
|
"$_gm/aaxfermodes.cpp",
|
|
"$_gm/addarc.cpp",
|
|
"$_gm/all_bitmap_configs.cpp",
|
|
"$_gm/alpha_image.cpp",
|
|
"$_gm/alphagradients.cpp",
|
|
"$_gm/analytic_gradients.cpp",
|
|
"$_gm/animatedGif.cpp",
|
|
"$_gm/androidblendmodes.cpp",
|
|
"$_gm/animatedimageblurs.cpp",
|
|
"$_gm/anisotropic.cpp",
|
|
"$_gm/annotated_text.cpp",
|
|
"$_gm/arcofzorro.cpp",
|
|
"$_gm/arcto.cpp",
|
|
"$_gm/arithmode.cpp",
|
|
"$_gm/atlastext.cpp",
|
|
"$_gm/badpaint.cpp",
|
|
"$_gm/beziereffects.cpp",
|
|
"$_gm/beziers.cpp",
|
|
"$_gm/bigblurs.cpp",
|
|
"$_gm/bigmatrix.cpp",
|
|
"$_gm/bigrect.cpp",
|
|
"$_gm/bigrrectaaeffect.cpp",
|
|
"$_gm/bigtext.cpp",
|
|
"$_gm/bigtileimagefilter.cpp",
|
|
"$_gm/bitmapcopy.cpp",
|
|
"$_gm/bitmapfilters.cpp",
|
|
"$_gm/bitmapimage.cpp",
|
|
"$_gm/bitmappremul.cpp",
|
|
"$_gm/bitmaprect.cpp",
|
|
"$_gm/bitmaprecttest.cpp",
|
|
"$_gm/bitmapshader.cpp",
|
|
"$_gm/bitmaptiled.cpp",
|
|
"$_gm/bleed.cpp",
|
|
"$_gm/blend.cpp",
|
|
"$_gm/blurcircles.cpp",
|
|
"$_gm/blurcircles2.cpp",
|
|
"$_gm/blurignorexform.cpp",
|
|
"$_gm/blurimagevmask.cpp",
|
|
"$_gm/blurquickreject.cpp",
|
|
"$_gm/blurrect.cpp",
|
|
"$_gm/blurredclippedcircle.cpp",
|
|
"$_gm/blurroundrect.cpp",
|
|
"$_gm/blurs.cpp",
|
|
"$_gm/blurpositioning.cpp",
|
|
"$_gm/blurtextsmallradii.cpp",
|
|
"$_gm/bmpfilterqualityrepeat.cpp",
|
|
"$_gm/bug5252.cpp",
|
|
"$_gm/bug6643.cpp",
|
|
"$_gm/bug6783.cpp",
|
|
"$_gm/bug530095.cpp",
|
|
"$_gm/bug615686.cpp",
|
|
"$_gm/cgm.c",
|
|
"$_gm/cgms.cpp",
|
|
"$_gm/circle_sizes.cpp",
|
|
"$_gm/circles.cpp",
|
|
"$_gm/circulararcs.cpp",
|
|
"$_gm/circularclips.cpp",
|
|
"$_gm/clip_error.cpp",
|
|
"$_gm/clip_strokerect.cpp",
|
|
"$_gm/clipdrawdraw.cpp",
|
|
"$_gm/clippedbitmapshaders.cpp",
|
|
"$_gm/clockwise.cpp",
|
|
"$_gm/color4f.cpp",
|
|
"$_gm/coloremoji.cpp",
|
|
"$_gm/coloremoji_blendmodes.cpp",
|
|
"$_gm/colorfilteralpha8.cpp",
|
|
"$_gm/colorfilterimagefilter.cpp",
|
|
"$_gm/colorfilters.cpp",
|
|
"$_gm/colormatrix.cpp",
|
|
"$_gm/colorwheel.cpp",
|
|
"$_gm/complexclip.cpp",
|
|
"$_gm/complexclip_blur_tiled.cpp",
|
|
"$_gm/complexclip2.cpp",
|
|
"$_gm/complexclip3.cpp",
|
|
"$_gm/complexclip4.cpp",
|
|
"$_gm/composeshader.cpp",
|
|
"$_gm/concavepaths.cpp",
|
|
"$_gm/conicpaths.cpp",
|
|
"$_gm/constcolorprocessor.cpp",
|
|
"$_gm/convex_all_line_paths.cpp",
|
|
"$_gm/convexpaths.cpp",
|
|
"$_gm/convexpolyclip.cpp",
|
|
"$_gm/convexpolyeffect.cpp",
|
|
"$_gm/copyTo4444.cpp",
|
|
"$_gm/crbug_691386.cpp",
|
|
"$_gm/crbug_788500.cpp",
|
|
"$_gm/crbug_847759.cpp",
|
|
"$_gm/crbug_884166.cpp",
|
|
"$_gm/crbug_887103.cpp",
|
|
"$_gm/croppedrects.cpp",
|
|
"$_gm/crosscontextimage.cpp",
|
|
"$_gm/cubicpaths.cpp",
|
|
"$_gm/dashcircle.cpp",
|
|
"$_gm/dashcubics.cpp",
|
|
"$_gm/dashing.cpp",
|
|
"$_gm/degeneratesegments.cpp",
|
|
"$_gm/dftext.cpp",
|
|
"$_gm/dftext_blob_persp.cpp",
|
|
"$_gm/discard.cpp",
|
|
"$_gm/displacement.cpp",
|
|
"$_gm/distantclip.cpp",
|
|
"$_gm/downsamplebitmap.cpp",
|
|
"$_gm/draw_bitmap_rect_skbug4374.cpp",
|
|
"$_gm/drawable.cpp",
|
|
"$_gm/drawatlas.cpp",
|
|
"$_gm/drawatlascolor.cpp",
|
|
"$_gm/drawbitmaprect.cpp",
|
|
"$_gm/drawlooper.cpp",
|
|
"$_gm/drawimageset.cpp",
|
|
"$_gm/drawminibitmaprect.cpp",
|
|
"$_gm/drawregion.cpp",
|
|
"$_gm/drawregionmodes.cpp",
|
|
"$_gm/dropshadowimagefilter.cpp",
|
|
"$_gm/drrect.cpp",
|
|
"$_gm/drrect_small_inner.cpp",
|
|
"$_gm/dstreadshuffle.cpp",
|
|
"$_gm/emboss.cpp",
|
|
"$_gm/emptypath.cpp",
|
|
"$_gm/encode.cpp",
|
|
"$_gm/encode-alpha-jpeg.cpp",
|
|
"$_gm/encode-platform.cpp",
|
|
"$_gm/encode-srgb.cpp",
|
|
"$_gm/extractbitmap.cpp",
|
|
"$_gm/fadefilter.cpp",
|
|
"$_gm/fatpathfill.cpp",
|
|
"$_gm/filltypes.cpp",
|
|
"$_gm/filltypespersp.cpp",
|
|
"$_gm/filterbitmap.cpp",
|
|
"$_gm/filterbug.cpp",
|
|
"$_gm/filterfastbounds.cpp",
|
|
"$_gm/filterindiabox.cpp",
|
|
"$_gm/flippity.cpp",
|
|
"$_gm/fontcache.cpp",
|
|
"$_gm/fontmgr.cpp",
|
|
"$_gm/fontscaler.cpp",
|
|
"$_gm/fontscalerdistortable.cpp",
|
|
"$_gm/gamma.cpp",
|
|
"$_gm/gammatext.cpp",
|
|
"$_gm/gamut.cpp",
|
|
"$_gm/getpostextpath.cpp",
|
|
"$_gm/giantbitmap.cpp",
|
|
"$_gm/glyph_pos.cpp",
|
|
"$_gm/gm.cpp",
|
|
"$_gm/gradient_matrix.cpp",
|
|
"$_gm/gradientDirtyLaundry.cpp",
|
|
"$_gm/gradients.cpp",
|
|
"$_gm/gradients_degenerate.cpp",
|
|
"$_gm/gradients_2pt_conical.cpp",
|
|
"$_gm/gradients_no_texture.cpp",
|
|
"$_gm/gradtext.cpp",
|
|
"$_gm/grayscalejpg.cpp",
|
|
"$_gm/hairlines.cpp",
|
|
"$_gm/hairmodes.cpp",
|
|
"$_gm/hardstop_gradients.cpp",
|
|
"$_gm/highcontrastfilter.cpp",
|
|
"$_gm/hittestpath.cpp",
|
|
"$_gm/hugepath.cpp",
|
|
"$_gm/hsl.cpp",
|
|
"$_gm/image.cpp",
|
|
"$_gm/image_pict.cpp",
|
|
"$_gm/image_shader.cpp",
|
|
"$_gm/imagealphathreshold.cpp",
|
|
"$_gm/imageblur.cpp",
|
|
"$_gm/imageblur2.cpp",
|
|
"$_gm/imageblurclampmode.cpp",
|
|
"$_gm/imageblurrepeatmode.cpp",
|
|
"$_gm/imageblurtiled.cpp",
|
|
"$_gm/imagefilters.cpp",
|
|
"$_gm/imagefiltersbase.cpp",
|
|
"$_gm/imagefiltersclipped.cpp",
|
|
"$_gm/imagefilterscropexpand.cpp",
|
|
"$_gm/imagefilterscropped.cpp",
|
|
"$_gm/imagefiltersgraph.cpp",
|
|
"$_gm/imagefiltersscaled.cpp",
|
|
"$_gm/imagefiltersstroked.cpp",
|
|
"$_gm/imagefilterstransformed.cpp",
|
|
"$_gm/imagefromyuvtextures.cpp",
|
|
"$_gm/imagemagnifier.cpp",
|
|
"$_gm/imagemakewithfilter.cpp",
|
|
"$_gm/imagemasksubset.cpp",
|
|
"$_gm/imageresizetiled.cpp",
|
|
"$_gm/imagescalealigned.cpp",
|
|
"$_gm/imagesource.cpp",
|
|
"$_gm/imagesource2.cpp",
|
|
"$_gm/internal_links.cpp",
|
|
"$_gm/inversepaths.cpp",
|
|
"$_gm/jpg_color_cube.cpp",
|
|
"$_gm/largeglyphblur.cpp",
|
|
"$_gm/lattice.cpp",
|
|
"$_gm/lcdblendmodes.cpp",
|
|
"$_gm/lcdoverlap.cpp",
|
|
"$_gm/lcdtext.cpp",
|
|
"$_gm/lighting.cpp",
|
|
"$_gm/lightingshader.cpp",
|
|
"$_gm/lightingshader2.cpp",
|
|
"$_gm/linepaths.cpp",
|
|
"$_gm/localmatriximagefilter.cpp",
|
|
"$_gm/localmatriximageshader.cpp",
|
|
"$_gm/localmatrixshader.cpp",
|
|
"$_gm/lumafilter.cpp",
|
|
"$_gm/makecolorspace.cpp",
|
|
"$_gm/makeRasterImage.cpp",
|
|
"$_gm/mandoline.cpp",
|
|
"$_gm/manypaths.cpp",
|
|
"$_gm/matrixconvolution.cpp",
|
|
"$_gm/matriximagefilter.cpp",
|
|
"$_gm/megalooper.cpp",
|
|
"$_gm/mipmap.cpp",
|
|
"$_gm/mixedtextblobs.cpp",
|
|
"$_gm/modecolorfilters.cpp",
|
|
"$_gm/morphology.cpp",
|
|
"$_gm/multipicturedraw.cpp",
|
|
"$_gm/nested.cpp",
|
|
"$_gm/ninepatchstretch.cpp",
|
|
"$_gm/nonclosedpaths.cpp",
|
|
"$_gm/offsetimagefilter.cpp",
|
|
"$_gm/orientation.cpp",
|
|
"$_gm/ovals.cpp",
|
|
"$_gm/overdrawcolorfilter.cpp",
|
|
"$_gm/OverStroke.cpp",
|
|
"$_gm/p3.cpp",
|
|
"$_gm/patch.cpp",
|
|
"$_gm/path_stroke_with_zero_length.cpp",
|
|
"$_gm/pathcontourstart.cpp",
|
|
"$_gm/patheffects.cpp",
|
|
"$_gm/pathfill.cpp",
|
|
"$_gm/pathinterior.cpp",
|
|
"$_gm/pathmaskcache.cpp",
|
|
"$_gm/pathmeasure.cpp",
|
|
"$_gm/pathopsinverse.cpp",
|
|
"$_gm/pathopsskpclip.cpp",
|
|
"$_gm/pathreverse.cpp",
|
|
"$_gm/pdf_never_embed.cpp",
|
|
"$_gm/perlinnoise.cpp",
|
|
"$_gm/perspimages.cpp",
|
|
"$_gm/perspshaders.cpp",
|
|
"$_gm/picture.cpp",
|
|
"$_gm/pictureimagefilter.cpp",
|
|
"$_gm/pictureimagegenerator.cpp",
|
|
"$_gm/pictureshader.cpp",
|
|
"$_gm/pictureshadercache.cpp",
|
|
"$_gm/pictureshadertile.cpp",
|
|
"$_gm/pixelsnap.cpp",
|
|
"$_gm/plus.cpp",
|
|
"$_gm/points.cpp",
|
|
"$_gm/poly2poly.cpp",
|
|
"$_gm/polygons.cpp",
|
|
"$_gm/polygonoffset.cpp",
|
|
"$_gm/quadpaths.cpp",
|
|
"$_gm/radial_gradient_precision.cpp",
|
|
"$_gm/readpixels.cpp",
|
|
"$_gm/recordopts.cpp",
|
|
"$_gm/rectangletexture.cpp",
|
|
"$_gm/rects.cpp",
|
|
"$_gm/repeated_bitmap.cpp",
|
|
"$_gm/resizeimagefilter.cpp",
|
|
"$_gm/roundrects.cpp",
|
|
"$_gm/rrect.cpp",
|
|
"$_gm/rrectclipdrawpaint.cpp",
|
|
"$_gm/rrects.cpp",
|
|
"$_gm/samplerstress.cpp",
|
|
"$_gm/savelayer.cpp",
|
|
"$_gm/scaledstrokes.cpp",
|
|
"$_gm/scaledemoji.cpp",
|
|
"$_gm/scaledemoji_rendering.cpp",
|
|
"$_gm/shadermaskfilter.cpp",
|
|
"$_gm/shadertext3.cpp",
|
|
"$_gm/shadows.cpp",
|
|
"$_gm/shadowutils.cpp",
|
|
"$_gm/shallowgradient.cpp",
|
|
"$_gm/shapes.cpp",
|
|
"$_gm/shapes_as_paths.cpp",
|
|
"$_gm/sharedcorners.cpp",
|
|
"$_gm/showmiplevels.cpp",
|
|
"$_gm/simpleaaclip.cpp",
|
|
"$_gm/simple_magnification.cpp",
|
|
"$_gm/simplerect.cpp",
|
|
"$_gm/skbug_257.cpp",
|
|
"$_gm/skbug_4868.cpp",
|
|
"$_gm/skbug_5321.cpp",
|
|
"$_gm/skbug1719.cpp",
|
|
"$_gm/skinning.cpp",
|
|
"$_gm/smallarc.cpp",
|
|
"$_gm/smallpaths.cpp",
|
|
"$_gm/spritebitmap.cpp",
|
|
"$_gm/srcmode.cpp",
|
|
"$_gm/srgb.cpp",
|
|
"$_gm/tosrgb_colorfilter.cpp",
|
|
"$_gm/stlouisarch.cpp",
|
|
"$_gm/stringart.cpp",
|
|
"$_gm/stroke_rect_shader.cpp",
|
|
"$_gm/strokedlines.cpp",
|
|
"$_gm/strokefill.cpp",
|
|
"$_gm/strokerect.cpp",
|
|
"$_gm/strokerects.cpp",
|
|
"$_gm/strokes.cpp",
|
|
"$_gm/stroketext.cpp",
|
|
"$_gm/subsetshader.cpp",
|
|
"$_gm/surface.cpp",
|
|
"$_gm/tablecolorfilter.cpp",
|
|
"$_gm/tallstretchedbitmaps.cpp",
|
|
"$_gm/testgradient.cpp",
|
|
"$_gm/textblob.cpp",
|
|
"$_gm/textblobblockreordering.cpp",
|
|
"$_gm/textblobcolortrans.cpp",
|
|
"$_gm/textblobgeometrychange.cpp",
|
|
"$_gm/textbloblooper.cpp",
|
|
"$_gm/textblobmixedsizes.cpp",
|
|
"$_gm/textblobrandomfont.cpp",
|
|
"$_gm/textblobshader.cpp",
|
|
"$_gm/textblobtransforms.cpp",
|
|
"$_gm/textblobuseaftergpufree.cpp",
|
|
"$_gm/texteffects.cpp",
|
|
"$_gm/text_scale_skew.cpp",
|
|
"$_gm/texturedomaineffect.cpp",
|
|
"$_gm/thinconcavepaths.cpp",
|
|
"$_gm/thinrects.cpp",
|
|
"$_gm/thinstrokedrects.cpp",
|
|
"$_gm/tiledscaledbitmap.cpp",
|
|
"$_gm/tileimagefilter.cpp",
|
|
"$_gm/tilemodes.cpp",
|
|
"$_gm/tilemodes_scaled.cpp",
|
|
"$_gm/tinybitmap.cpp",
|
|
"$_gm/tonalshadows.cpp",
|
|
"$_gm/transparency.cpp",
|
|
"$_gm/trickycubicstrokes.cpp",
|
|
"$_gm/typeface.cpp",
|
|
"$_gm/unpremul.cpp",
|
|
"$_gm/variedtext.cpp",
|
|
"$_gm/vertices.cpp",
|
|
"$_gm/verylargebitmap.cpp",
|
|
"$_gm/wacky_yuv_formats.cpp",
|
|
"$_gm/windowrectangles.cpp",
|
|
"$_gm/xfermodeimagefilter.cpp",
|
|
"$_gm/xfermodes.cpp",
|
|
"$_gm/xfermodes2.cpp",
|
|
"$_gm/xfermodes3.cpp",
|
|
"$_gm/yuvtorgbeffect.cpp",
|
|
]
|