Open sternenseemann opened 1 year ago
We are seeing this in Debian as well, the error is:
i_number_huge_exp.json
decode: FAIL
Test output was different from 'tests/JSONTestSuite/results/i_number_huge_exp.txt'. Output of ["diff","-u","tests/JSONTestSuite/results/i_number_huge_exp.txt","/tmp/i_number_huge_exp3240953-4.actual"]:
--- tests/JSONTestSuite/results/i_number_huge_exp.txt 2001-09-09 01:46:40.000000000 +0000
+++ /tmp/i_number_huge_exp3240953-4.actual 2023-10-21 06:05:02.580198038 +0000
@@ -1 +1 @@
-Right (Array [Number 4.0e-30000000995])
+Right (Array [Number 4.0e64770077])
Use -p '$0=="tests.JSONTestSuite.i_number_huge_exp.json.decode"' to rerun this test only.
decode via tokens: FAIL
Test output was different from 'tests/JSONTestSuite/results/i_number_huge_exp.txt'. Output of ["diff","-u","tests/JSONTestSuite/results/i_number_huge_exp.txt","/tmp/i_number_huge_exp3240953-5.actual"]:
--- tests/JSONTestSuite/results/i_number_huge_exp.txt 2001-09-09 01:46:40.000000000 +0000
+++ /tmp/i_number_huge_exp3240953-5.actual 2023-10-21 06:05:02.588198009 +0000
@@ -1 +1 @@
-Right (Array [Number 4.0e-30000000995])
+Right (Array [Number 4.0e64770077])
Use -p '/i_number_huge_exp.json.decode via tokens/' to rerun this test only.
tokens bs: FAIL (0.01s)
Test output was different from 'tests/JSONTestSuite/results/i_number_huge_exp.tok'. Output of ["diff","-u","tests/JSONTestSuite/results/i_number_huge_exp.tok","/tmp/i_number_huge_exp3240953-6.actual"]:
--- tests/JSONTestSuite/results/i_number_huge_exp.tok 2001-09-09 01:46:40.000000000 +0000
+++ /tmp/i_number_huge_exp3240953-6.actual 2023-10-21 06:05:02.596197979 +0000
@@ -1,4 +1,4 @@
TkArrayOpen
TkItem
-TkNumber NumScientific 4.0e-30000000995
+TkNumber NumScientific 4.0e64770077
TkArrayEnd
Use -p '/i_number_huge_exp.json.tokens bs/' to rerun this test only.
tokens lbs: FAIL
Test output was different from 'tests/JSONTestSuite/results/i_number_huge_exp.tok'. Output of ["diff","-u","tests/JSONTestSuite/results/i_number_huge_exp.tok","/tmp/i_number_huge_exp3240953-7.actual"]:
--- tests/JSONTestSuite/results/i_number_huge_exp.tok 2001-09-09 01:46:40.000000000 +0000
+++ /tmp/i_number_huge_exp3240953-7.actual 2023-10-21 06:05:02.604197950 +0000
@@ -1,4 +1,4 @@
TkArrayOpen
TkItem
-TkNumber NumScientific 4.0e-30000000995
+TkNumber NumScientific 4.0e64770077
TkArrayEnd
Use -p '/i_number_huge_exp.json.tokens lbs/' to rerun this test only.
I bisected this and found the commit that introduced this regression is f089cdbf5dc (CC @phadej ). I believe this commit is wrong because the cached results are only valid for 64-bit systems and not for 32-bit ones. In Debian, I have reverted this commit in Debian for now.
The real issue here is that on both systems the exponent in numbers may overflow (and on 32bit system JSONTestSuite happened to have tests where it does), but the parse is still successful. So that is clearly wrong.
There are two options:
Scientific
exponent to be an Integer
, so overflow won't happen. Then the behavior will be the same.
The offending tests seem to be:
/i_number_huge_exp.json.tokens bs/
/i_number_huge_exp.json.tokens lbs/
/i_number_huge_exp.json.decode via tokens/
Full log
Using Nix/nixpkgs, i686-linux, GHC 9.4.6