[BUG]科学计数表示的异常浮点数解析抛异常
lzwang2 opened this issue · comments
lzwang2 commented
问题描述
日志中出现了以科学计数表示,却异常的浮点数。
如下例中的longitude,其E后的值达到了-322。
{"geo":{"latitude":5.73E-32,"longitude":2.0E-322}}
环境信息
- OS信息: macOS Big Sur 11.5.2
- JDK信息: Oraclejdk 1.8.0_191
- 版本信息:Fastjson2 2.0.2
重现步骤
执行如下代码
JSON.parse("{\"geo\":{\"latitude\":5.73E-32,\"longitude\":2.0E-322}}");
期待的正确结果
兼容异常值,或可将longitude默认处理成0,避免整个json串解析失败。
相关日志输出
抛出了如下异常
Exception in thread "main" com.alibaba.fastjson2.JSONException: to large exp value : 322
at com.alibaba.fastjson2.JSONReaderUTF16.readNumber0(JSONReaderUTF16.java:1569)
at com.alibaba.fastjson2.JSONReader.readObject(JSONReader.java:1070)
at com.alibaba.fastjson2.reader.ObjectReaderImplObject.readObject(ObjectReaderImplObject.java:113)
at com.alibaba.fastjson2.JSON.parse(JSON.java:41)
at com.iflytek.gnome.data.tmpsupport.main.TestMain$.main(TestMain.scala:14)
at com.iflytek.gnome.data.tmpsupport.main.TestMain.main(TestMain.scala)
Shaojin Wen commented
已经将科学计数法的e限制提升到512,你可以用2.0.3-SNAPSHOT验证。支持太大的e会导致性能问题。