alibaba / fastjson2

🚄 FASTJSON2 is a Java JSON library with excellent performance.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

[BUG]科学计数表示的异常浮点数解析抛异常

lzwang2 opened this issue · comments

问题描述

日志中出现了以科学计数表示,却异常的浮点数。
如下例中的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)

已经将科学计数法的e限制提升到512,你可以用2.0.3-SNAPSHOT验证。支持太大的e会导致性能问题。

https://oss.sonatype.org/content/repositories/snapshots/com/alibaba/fastjson2/fastjson2/2.0.3-SNAPSHOT/