From c9bc81434adc0c0ea6012167fbda0e131548e683 Mon Sep 17 00:00:00 2001 From: Mike Klein Date: Mon, 27 Nov 2017 12:39:30 -0500 Subject: Handle null colorspace in SkToSRGBColorFilter. This was uncovered by the linked fuzzer issue. I haven't looked hard at it, but I'd guess it's fuzzed an ICC profile into one that can't be deserialized, and we get a null in CreateProc(). We could probably restrict the null check to just CreateProc(), but putting it in Make() and asserting in the constructor feels cozy. BUG=chromium:787718 Change-Id: Ic4b1dad28c00ee5870f22093eedbf34686c32120 Reviewed-on: https://skia-review.googlesource.com/76080 Commit-Queue: Mike Klein Reviewed-by: Brian Osman --- tests/ToSRGBColorFilter.cpp | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 tests/ToSRGBColorFilter.cpp (limited to 'tests/ToSRGBColorFilter.cpp') diff --git a/tests/ToSRGBColorFilter.cpp b/tests/ToSRGBColorFilter.cpp new file mode 100644 index 0000000000..01c5673d4d --- /dev/null +++ b/tests/ToSRGBColorFilter.cpp @@ -0,0 +1,29 @@ +/* + * Copyright 2017 Google Inc. + * + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#include "SkColorSpace.h" +#include "SkToSRGBColorFilter.h" +#include "Test.h" + + +DEF_TEST(SkToSRGBColorFilter, r) { + + // sRGB -> sRGB is a no-op. + REPORTER_ASSERT(r, nullptr == SkToSRGBColorFilter::Make(SkColorSpace::MakeSRGB())); + + // The transfer function matters just as much as the gamut. + REPORTER_ASSERT(r, nullptr != SkToSRGBColorFilter::Make(SkColorSpace::MakeSRGBLinear())); + + // We generally interpret nullptr source spaces as sRGB. See also chromium:787718. + REPORTER_ASSERT(r, nullptr == SkToSRGBColorFilter::Make(nullptr)); + + // Here's a realistic conversion. + auto dci_p3 = SkColorSpace::MakeRGB(SkColorSpace::kLinear_RenderTargetGamma, + SkColorSpace::kDCIP3_D65_Gamut); + REPORTER_ASSERT(r, nullptr != SkToSRGBColorFilter::Make(dci_p3)); + +} -- cgit v1.2.3