pull in roundtrip thresholds much more tightly

There are all sorts of dangerous values to work with up there near
INT_MAX, see associated bug.  We can just check we fall in the table.

Bug: oss-fuzz:8142
Change-Id: I3cc6844a6efbe5351d6714664faf39d3ded5bca7
Reviewed-on: https://skia-review.googlesource.com/125861
Auto-Submit: Mike Klein <mtklein@chromium.org>
Commit-Queue: Brian Osman <brianosman@google.com>
Reviewed-by: Brian Osman <brianosman@google.com>
diff --git a/profiles/fuzz/polytf_big_float_to_int_cast.icc b/profiles/fuzz/polytf_big_float_to_int_cast.icc
new file mode 100644
index 0000000..ad5c184
--- /dev/null
+++ b/profiles/fuzz/polytf_big_float_to_int_cast.icc
Binary files differ
diff --git a/profiles/fuzz/polytf_big_float_to_int_cast.icc.txt b/profiles/fuzz/polytf_big_float_to_int_cast.icc.txt
new file mode 100644
index 0000000..065f4aa
--- /dev/null
+++ b/profiles/fuzz/polytf_big_float_to_int_cast.icc.txt
@@ -0,0 +1,37 @@
+                Size : 0x0000020C : 524
+    Data color space : 0x20202020 : '    '
+                 PCS : 0x58595A20 : 'XYZ '
+           Tag count : 0x0000000A : 10
+
+ Tag    : Type   : Size   : Offset
+ ------ : ------ : ------ : --------
+ '    ' : '    ' :     32 : 32
+ '    ' : '    ' :     32 : 288
+ '    ' : '    ' :     32 : 288
+ '    ' : '    ' :     32 : 288
+ 'rXYZ' : 'XYZ ' :     32 : 400
+ 'gXYZ' : 'XYZ ' :     32 : 420
+ 'bXYZ' : 'XYZ ' :     32 : 440
+ 'rTRC' : 'para' :     32 : 456
+ 'gTRC' : 'para' :     32 : 456
+ 'bTRC' : 'curv' :     32 : 460
+
+rTRC : 1.525879e-05, 0.003890991, -32768, 8224.125, 0, 0, 0
+gTRC : 1.525879e-05, 0.003890991, -32768, 8224.125, 0, 0, 0
+bTRC : 0, 1, 0, 0, 0, 0, 0
+ XYZ : | 8224.125000000 8224.125000000 8224.125000000 |
+       | 8224.125000000 8224.125000000 8224.125000000 |
+       | 8224.125000000 -223.874511719 28769.447265625 |
+252 random bytes transformed to linear XYZD50 bytes:
+	ffffff ffffff ffffff ffffff ffffff ffffff ffffff
+	ffffff ffffff ffffff ffffff ffffff ffffff ffffff
+	ffffff ffffff ffffff ffffff ffffff ffffff ffffff
+	ffffff ffffff ffffff ffffff ffffff ffffff ffffff
+	ffffff ffffff ffffff ffffff ffffff ffffff ffffff
+	ffffff ffffff ffffff ffffff ffffff ffffff ffffff
+	ffffff ffffff ffffff ffffff ffffff ffffff ffffff
+	ffffff ffffff ffffff ffffff ffffff ffffff ffffff
+	ffffff ffffff ffffff ffffff ffffff ffffff ffffff
+	ffffff ffffff ffffff ffffff ffffff ffffff ffffff
+	ffffff ffffff ffffff ffffff ffffff ffffff ffffff
+	ffffff ffffff ffffff ffffff ffffff ffffff ffffff
diff --git a/src/PolyTF.c b/src/PolyTF.c
index 62da2d4..6ffbc50 100644
--- a/src/PolyTF.c
+++ b/src/PolyTF.c
@@ -149,7 +149,7 @@
 
         float rt = skcms_TransferFunction_eval(&inv, eval_poly_tf(x, A,B,C,D))
                  * (N-1) + 0.5f;
-        if (!isfinitef_(rt) || rt > INT_MAX || rt < -INT_MAX) {
+        if (!isfinitef_(rt) || rt >= N || rt < 0) {
             return false;
         }
 
diff --git a/tests.c b/tests.c
index 6015db1..d1f1e41 100644
--- a/tests.c
+++ b/tests.c
@@ -511,8 +511,9 @@
     "profiles/fuzz/mangled_trc_tags.icc",             // chromium:835666
     "profiles/fuzz/negative_g_para.icc",              // chromium:836634
 
-    // Once caused skcms_PolyTF fit to round trip an index to infinity.
+    // Caused skcms_PolyTF fit to round trip indices outside the range of int.
     "profiles/fuzz/infinite_roundtrip.icc",           // oss-fuzz:8101
+    "profiles/fuzz/polytf_big_float_to_int_cast.icc", // oss-fuzz:8142
 
     // Caused skcms_ApproximateCurve to violate the a*d+b >= 0 constraint.
     "profiles/fuzz/inverse_tf_adb_negative.icc",      // oss-fuzz:8130