aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/core
diff options
context:
space:
mode:
authorGravatar Brian Osman <brianosman@google.com>2018-04-24 15:00:59 -0400
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2018-04-24 19:38:16 +0000
commit7886995ae92a5fcd8f10ab19581678b38f7cc969 (patch)
tree99939172d36fb31aea93f63e6a8e5a9e472e6937 /src/core
parent47728258b05a1ae040ed03aee53eabbaa0acbc5a (diff)
Make SkColorSpace::Make(skcms_ICCProfile) stricter
Don't do any modification to the incoming profile. Basically, if you want this to succeed, call skcms_EnsureUsableAsDestinationWithSingleCurve first. Change-Id: Iafe3fd3c82c2fb2cc0e42b1968a69bf605be241c Reviewed-on: https://skia-review.googlesource.com/123521 Reviewed-by: Mike Klein <mtklein@chromium.org> Commit-Queue: Brian Osman <brianosman@google.com>
Diffstat (limited to 'src/core')
-rw-r--r--src/core/SkColorSpaceXform_skcms.cpp19
1 files changed, 15 insertions, 4 deletions
diff --git a/src/core/SkColorSpaceXform_skcms.cpp b/src/core/SkColorSpaceXform_skcms.cpp
index 936f7e4dd5..bc5b3a23dc 100644
--- a/src/core/SkColorSpaceXform_skcms.cpp
+++ b/src/core/SkColorSpaceXform_skcms.cpp
@@ -133,12 +133,23 @@ sk_sp<SkColorSpace> SkColorSpace::Make(const skcms_ICCProfile* profile) {
return nullptr;
}
- skcms_TransferFunction tf = skcms_BestSingleCurve(profile);
- SkColorSpaceTransferFn skia_tf;
- memcpy(&skia_tf, &tf, sizeof(skia_tf));
-
SkMatrix44 toXYZD50(SkMatrix44::kUninitialized_Constructor);
toXYZD50.set3x3RowMajorf(&profile->toXYZD50.vals[0][0]);
+ if (!toXYZD50.invert(nullptr)) {
+ return nullptr;
+ }
+
+ const skcms_Curve* trc = profile->trc;
+ if (trc[0].table_entries ||
+ trc[1].table_entries ||
+ trc[2].table_entries ||
+ memcmp(&trc[0].parametric, &trc[1].parametric, sizeof(trc[0].parametric)) ||
+ memcmp(&trc[0].parametric, &trc[2].parametric, sizeof(trc[0].parametric))) {
+ return nullptr;
+ }
+
+ SkColorSpaceTransferFn skia_tf;
+ memcpy(&skia_tf, &profile->trc[0].parametric, sizeof(skia_tf));
return SkColorSpace::MakeRGB(skia_tf, toXYZD50);
}