Roll skcms from 97bfcc9529c9 to da218e6af725 (1 revision)
https://skia.googlesource.com/skcms.git/+log/97bfcc9529c9..da218e6af725
2020-05-19 brianosman@google.com Guard exp2f_ to never return a negative value
If this roll has caused a breakage, revert this CL and stop the roller
using the controls here:
https://autoroll.skia.org/r/skcms-skia-autoroll
Please CC lovisolo@google.com,mtklein@google.com on the revert to ensure that a human
is aware of the problem.
To report a problem with the AutoRoller itself, please file a bug:
https://bugs.chromium.org/p/skia/issues/entry?template=Autoroller+Bug
Documentation for the AutoRoller is here:
https://skia.googlesource.com/buildbot/+doc/master/autoroll/README.md
Change-Id: I6d5c9a36f05ed33a3a8496858794cd79f5d5c3bc
Tbr: lovisolo@google.com,mtklein@google.com
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/290836
Reviewed-by: skia-autoroll <skia-autoroll@skia-public.iam.gserviceaccount.com>
Commit-Queue: skia-autoroll <skia-autoroll@skia-public.iam.gserviceaccount.com>
diff --git a/third_party/skcms/skcms.cc b/third_party/skcms/skcms.cc
index ae5ba4f..5d6ae3d 100644
--- a/third_party/skcms/skcms.cc
+++ b/third_party/skcms/skcms.cc
@@ -84,11 +84,12 @@
// Before we cast fbits to int32_t, check for out of range values to pacify UBSAN.
// INT_MAX is not exactly representable as a float, so exclude it as effectively infinite.
- // INT_MIN is a power of 2 and exactly representable as a float, so it's fine.
+ // Negative values are effectively underflow - we'll end up returning a (different) negative
+ // value, which makes no sense. So clamp to zero.
if (fbits >= (float)INT_MAX) {
return INFINITY_;
- } else if (fbits < (float)INT_MIN) {
- return -INFINITY_;
+ } else if (fbits < 0) {
+ return 0;
}
int32_t bits = (int32_t)fbits;
diff --git a/third_party/skcms/src/Transform_inl.h b/third_party/skcms/src/Transform_inl.h
index c4b3122..2dcf717 100644
--- a/third_party/skcms/src/Transform_inl.h
+++ b/third_party/skcms/src/Transform_inl.h
@@ -287,9 +287,11 @@
#else
F fract = x - floor_(x);
- I32 bits = cast<I32>((1.0f * (1<<23)) * (x + 121.274057500f
- - 1.490129070f*fract
- + 27.728023300f/(4.84252568f - fract)));
+ F fbits = (1.0f * (1<<23)) * (x + 121.274057500f
+ - 1.490129070f*fract
+ + 27.728023300f/(4.84252568f - fract));
+ I32 bits = cast<I32>(max_(fbits, F0));
+
return bit_pun<F>(bits);
#endif
}
diff --git a/third_party/skcms/version.sha1 b/third_party/skcms/version.sha1
index 1e636bc..7ca0062 100755
--- a/third_party/skcms/version.sha1
+++ b/third_party/skcms/version.sha1
@@ -1 +1 @@
-97bfcc9529c9dcaaf72ac421e79f55ffd6a58d3e
+da218e6af7250a97c0ae0439695833fd4a60cdda