From 3a49520696b2eca69e57884657d23fd2402ccfd1 Mon Sep 17 00:00:00 2001 From: senorblanco Date: Mon, 29 Sep 2014 07:57:20 -0700 Subject: Sanitize SkMatrixConvolutionImageFilter creation params. Apply the same memory limit in the Create() function that we do when deserializing. R=reed@google.com Author: senorblanco@chromium.org Review URL: https://codereview.chromium.org/610723002 --- tests/ImageFilterTest.cpp | 54 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) (limited to 'tests') diff --git a/tests/ImageFilterTest.cpp b/tests/ImageFilterTest.cpp index b1d087825b..d0fa93f6e9 100644 --- a/tests/ImageFilterTest.cpp +++ b/tests/ImageFilterTest.cpp @@ -895,6 +895,60 @@ DEF_TEST(HugeBlurImageFilter, reporter) { test_huge_blur(&device, reporter); } +DEF_TEST(MatrixConvolutionSanityTest, reporter) { + SkScalar kernel[1] = { 0 }; + SkScalar gain = SK_Scalar1, bias = 0; + SkIPoint kernelOffset = SkIPoint::Make(1, 1); + + // Check that an enormous (non-allocatable) kernel gives a NULL filter. + SkAutoTUnref conv(SkMatrixConvolutionImageFilter::Create( + SkISize::Make(1<<30, 1<<30), + kernel, + gain, + bias, + kernelOffset, + SkMatrixConvolutionImageFilter::kRepeat_TileMode, + false)); + + REPORTER_ASSERT(reporter, NULL == conv.get()); + + // Check that a NULL kernel gives a NULL filter. + conv.reset(SkMatrixConvolutionImageFilter::Create( + SkISize::Make(1, 1), + NULL, + gain, + bias, + kernelOffset, + SkMatrixConvolutionImageFilter::kRepeat_TileMode, + false)); + + REPORTER_ASSERT(reporter, NULL == conv.get()); + + // Check that a kernel width < 1 gives a NULL filter. + conv.reset(SkMatrixConvolutionImageFilter::Create( + SkISize::Make(0, 1), + kernel, + gain, + bias, + kernelOffset, + SkMatrixConvolutionImageFilter::kRepeat_TileMode, + false)); + + REPORTER_ASSERT(reporter, NULL == conv.get()); + + // Check that kernel height < 1 gives a NULL filter. + conv.reset(SkMatrixConvolutionImageFilter::Create( + SkISize::Make(1, -1), + kernel, + gain, + bias, + kernelOffset, + SkMatrixConvolutionImageFilter::kRepeat_TileMode, + false)); + + REPORTER_ASSERT(reporter, NULL == conv.get()); +} + static void test_xfermode_cropped_input(SkBaseDevice* device, skiatest::Reporter* reporter) { SkCanvas canvas(device); canvas.clear(0); -- cgit v1.2.3