alibaba / alibaba/fastjson2

[BUG] 麒麟系统下oracle jdk 1.8 导致的`parseObject`报错

Open
#7,649 2 comments 0 reactions 0 assignees View on GitHub
bug
Dominant language
Java
Stars
4.4k
Forks
613
Avg merge
1d 22h
Merged PRs (30d)
6

Description

### 问题描述
麒麟系统下oracle jdk导致 `v2.0.54`以后的版本运行多次`parseObject`报错
- v2.0.54及之前的版本没有此问题
- 换成zulu jdk可以解决
- java -jar运行时候添加-Djava.compiler=NONE也可以

### 环境信息
========== Environment ==========
OS: Linux 4.19.90-24.4.v2101.ky10.aarch64 (aarch64)
CPU: HUAWEI,Kunpeng 920 (64 cores)
JDK: 1.8.0_351 (Oracle Corporation)
JVM: Java HotSpot(TM) 64-Bit Server VM 25.351-b10
Memory: 27278MB max

### 重现步骤
可查看以下日志

报错的日志
```shell
java -jar demo2-1.5-SNAPSHOT.jar
========== Environment ==========
OS: Linux 4.19.90-24.4.v2101.ky10.aarch64 (aarch64)
CPU: HUAWEI,Kunpeng 920 (64 cores)
JDK: 1.8.0_351 (Oracle Corporation)
JVM: Java HotSpot(TM) 64-Bit Server VM 25.351-b10
Memory: 27278MB max

========== Fastjson2 Multi-Version Test (9 versions) ==========
Extracted jars to: /tmp/fastjson2-multi-version-test-25543256107826837

--- Testing v2.0.55 (fastjson2-2.0.55.jar) ---
num=100 | ALL PASS | 19ms
num=1000 | FAIL at i=392
RuntimeException: java.lang.reflect.InvocationTargetException
InvocationTargetException: null
JSONException: illegal input, offset 828, character 3, line 1, column 828, fastjson-version 2.0.55 {"dataun":"0002020015001011","mlcd":"","uuid":null,"pdcd":"Y2023","bzcode":"DATJ","tt_id":"T2301","datas":[{"data":[{"pdcd":"Y2023","tb_un":"0002020015001011"},{"DA3_078":46,"DA3_028_01":37,"DA3_053":36,"DA3_054":637,"DA3_030_01":3.6,"DA3_029_01":962,"DA3_077":96,"DA3_076":1,"DA3_025_01":1,"DA3_027_01":1,"DA3_026_01":1,"DA3_041_01":4,"DA3_042_01":326,"DA3_053_01":33,"DA3_054_01":636,"PUB05":"xxxxx","PUB08":"xxx","PUB02":"xxx","PUB03":"075","PUB04":"422000","PUB01":"11430511MB10830639","PUB09":"XXX","DA3_076_01":1,"DA3_078_01":45,"DA3_091_01":"2","DA3_092_01":29,"DA3_093_01":35,"DA3_089_01":"2","DA3_025":1,"DA3_026":1,"DA3_090_01":"2","DA3_099_01":18,"DA3_098_01":18,"PUB10":"XX","DA3_098":18,"DA3_099":8,"DA3_041":6,"DA3_042":327,"DA3_093":5,"DA3_092":29,"DA3_027":1,"DA3_028":40,"DA3_029":963,"PUB07":"2023","DA3_030":3.8,"PUB06":"0739-5180709"}],"tt_ver_n":"01","ts_cd":"S03","hasml":false,"ts_un":"0","hasdata":false}],"noAftercal":true}
num=10000 | FAIL at i=9
RuntimeException: java.lang.reflect.InvocationTargetException
InvocationTargetException: null
JSONException: illegal input, offset 411, character ", line 1, column 411, fastjson-version 2.0.55 {"dataun":"0002020015001011","mlcd":"","uuid":null,"pdcd":"Y2023","bzcode":"DATJ","tt_id":"T2301","datas":[{"data":[{"pdcd":"Y2023","tb_un":"0002020015001011"},{"DA3_078":46,"DA3_028_01":37,"DA3_053":36,"DA3_054":637,"DA3_030_01":3.6,"DA3_029_01":962,"DA3_077":96,"DA3_076":1,"DA3_025_01":1,"DA3_027_01":1,"DA3_026_01":1,"DA3_041_01":4,"DA3_042_01":326,"DA3_053_01":33,"DA3_054_01":636,"PUB05":"xxxxx","PUB08":"xxx","PUB02":"xxx","PUB03":"075","PUB04":"422000","PUB01":"11430511MB10830639","PUB09":"XXX","DA3_076_01":1,"DA3_078_01":45,"DA3_091_01":"2","DA3_092_01":29,"DA3_093_01":35,"DA3_089_01":"2","DA3_025":1,"DA3_026":1,"DA3_090_01":"2","DA3_099_01":18,"DA3_098_01":18,"PUB10":"XX","DA3_098":18,"DA3_099":8,"DA3_041":6,"DA3_042":327,"DA3_093":5,"DA3_092":29,"DA3_027":1,"DA3_028":40,"DA3_029":963,"PUB07":"2023","DA3_030":3.8,"PUB06":"0739-5180709"}],"tt_ver_n":"01","ts_cd":"S03","hasml":false,"ts_un":"0","hasdata":false}],"noAftercal":true}

--- Testing v2.0.54 (fastjson2-2.0.54.jar) ---
num=100 | ALL PASS | 14ms
num=1000 | ALL PASS | 30ms
num=10000 | ALL PASS | 112ms

--- Testing v2.0.53 (fastjson2-2.0.53.jar) ---
num=100 | ALL PASS | 14ms
num=1000 | ALL PASS | 30ms
num=10000 | ALL PASS | 109ms

--- Testing v2.0.61 (fastjson2-2.0.61.jar) ---
num=100 | ALL PASS | 16ms
num=1000 | FAIL at i=378
RuntimeException: java.lang.reflect.InvocationTargetException
InvocationTargetException: null
JSONException: invalid escape character EOI, offset 395, character ", line 1, column 395, fastjson-version 2.0.61 {"dataun":"0002020015001011","mlcd":"","uuid":null,"pdcd":"Y2023","bzcode":"DATJ","tt_id":"T2301","datas":[{"data":[{"pdcd":"Y2023","tb_un":"0002020015001011"},{"DA3_078":46,"DA3_028_01":37,"DA3_053":36,"DA3_054":637,"DA3_030_01":3.6,"DA3_029_01":962,"DA3_077":96,"DA3_076":1,"DA3_025_01":1,"DA3_027_01":1,"DA3_026_01":1,"DA3_041_01":4,"DA3_042_01":326,"DA3_053_01":33,"DA3_054_01":636,"PUB05":"xxxxx","PUB08":"xxx","PUB02":"xxx","PUB03":"075","PUB04":"422000","PUB01":"11430511MB10830639","PUB09":"XXX","DA3_076_01":1,"DA3_078_01":45,"DA3_091_01":"2","DA3_092_01":29,"DA3_093_01":35,"DA3_089_01":"2","DA3_025":1,"DA3_026":1,"DA3_090_01":"2","DA3_099_01":18,"DA3_098_01":18,"PUB10":"XX","DA3_098":18,"DA3_099":8,"DA3_041":6,"DA3_042":327,"DA3_093":5,"DA3_092":29,"DA3_027":1,"DA3_028":40,"DA3_029":963,"PUB07":"2023","DA3_030":3.8,"PUB06":"0739-5180709"}],"tt_ver_n":"01","ts_cd":"S03","hasml":false,"ts_un":"0","hasdata":false}],"noAftercal":true}
num=10000 | FAIL at i=1
RuntimeException: java.lang.reflect.InvocationTargetException
InvocationTargetException: null
JSONException: offset 13, character 0, line 1, column 13, fastjson-version 2.0.61 {"dataun":"0002020015001011","mlcd":"","uuid":null,"pdcd":"Y2023","bzcode":"DATJ","tt_id":"T2301","datas":[{"data":[{"pdcd":"Y2023","tb_un":"0002020015001011"},{"DA3_078":46,"DA3_028_01":37,"DA3_053":36,"DA3_054":637,"DA3_030_01":3.6,"DA3_029_01":962,"DA3_077":96,"DA3_076":1,"DA3_025_01":1,"DA3_027_01":1,"DA3_026_01":1,"DA3_041_01":4,"DA3_042_01":326,"DA3_053_01":33,"DA3_054_01":636,"PUB05":"xxxxx","PUB08":"xxx","PUB02":"xxx","PUB03":"075","PUB04":"422000","PUB01":"11430511MB10830639","PUB09":"XXX","DA3_076_01":1,"DA3_078_01":45,"DA3_091_01":"2","DA3_092_01":29,"DA3_093_01":35,"DA3_089_01":"2","DA3_025":1,"DA3_026":1,"DA3_090_01":"2","DA3_099_01":18,"DA3_098_01":18,"PUB10":"XX","DA3_098":18,"DA3_099":8,"DA3_041":6,"DA3_042":327,"DA3_093":5,"DA3_092":29,"DA3_027":1,"DA3_028":40,"DA3_029":963,"PUB07":"2023","DA3_030":3.8,"PUB06":"0739-5180709"}],"tt_ver_n":"01","ts_cd":"S03","hasml":false,"ts_un":"0","hasdata":false}],"noAftercal":true}

--- Testing v2.0.48 (fastjson2-2.0.48.jar) ---
num=100 | ALL PASS | 15ms
num=1000 | ALL PASS | 27ms
num=10000 | ALL PASS | 108ms

--- Testing v2.0.62 (fastjson2-2.0.62.jar) ---
num=100 | ALL PASS | 16ms
num=1000 | FAIL at i=378
RuntimeException: java.lang.reflect.InvocationTargetException
InvocationTargetException: null
JSONException: invalid escape character EOI, offset 598, character ", line 1, column 598, fastjson-version 2.0.61 {"dataun":"0002020015001011","mlcd":"","uuid":null,"pdcd":"Y2023","bzcode":"DATJ","tt_id":"T2301","datas":[{"data":[{"pdcd":"Y2023","tb_un":"0002020015001011"},{"DA3_078":46,"DA3_028_01":37,"DA3_053":36,"DA3_054":637,"DA3_030_01":3.6,"DA3_029_01":962,"DA3_077":96,"DA3_076":1,"DA3_025_01":1,"DA3_027_01":1,"DA3_026_01":1,"DA3_041_01":4,"DA3_042_01":326,"DA3_053_01":33,"DA3_054_01":636,"PUB05":"xxxxx","PUB08":"xxx","PUB02":"xxx","PUB03":"075","PUB04":"422000","PUB01":"11430511MB10830639","PUB09":"XXX","DA3_076_01":1,"DA3_078_01":45,"DA3_091_01":"2","DA3_092_01":29,"DA3_093_01":35,"DA3_089_01":"2","DA3_025":1,"DA3_026":1,"DA3_090_01":"2","DA3_099_01":18,"DA3_098_01":18,"PUB10":"XX","DA3_098":18,"DA3_099":8,"DA3_041":6,"DA3_042":327,"DA3_093":5,"DA3_092":29,"DA3_027":1,"DA3_028":40,"DA3_029":963,"PUB07":"2023","DA3_030":3.8,"PUB06":"0739-5180709"}],"tt_ver_n":"01","ts_cd":"S03","hasml":false,"ts_un":"0","hasdata":false}],"noAftercal":true}
num=10000 | FAIL at i=10
RuntimeException: java.lang.reflect.InvocationTargetException
InvocationTargetException: null
JSONException: offset 13, character 0, line 1, column 13, fastjson-version 2.0.61 {"dataun":"0002020015001011","mlcd":"","uuid":null,"pdcd":"Y2023","bzcode":"DATJ","tt_id":"T2301","datas":[{"data":[{"pdcd":"Y2023","tb_un":"0002020015001011"},{"DA3_078":46,"DA3_028_01":37,"DA3_053":36,"DA3_054":637,"DA3_030_01":3.6,"DA3_029_01":962,"DA3_077":96,"DA3_076":1,"DA3_025_01":1,"DA3_027_01":1,"DA3_026_01":1,"DA3_041_01":4,"DA3_042_01":326,"DA3_053_01":33,"DA3_054_01":636,"PUB05":"xxxxx","PUB08":"xxx","PUB02":"xxx","PUB03":"075","PUB04":"422000","PUB01":"11430511MB10830639","PUB09":"XXX","DA3_076_01":1,"DA3_078_01":45,"DA3_091_01":"2","DA3_092_01":29,"DA3_093_01":35,"DA3_089_01":"2","DA3_025":1,"DA3_026":1,"DA3_090_01":"2","DA3_099_01":18,"DA3_098_01":18,"PUB10":"XX","DA3_098":18,"DA3_099":8,"DA3_041":6,"DA3_042":327,"DA3_093":5,"DA3_092":29,"DA3_027":1,"DA3_028":40,"DA3_029":963,"PUB07":"2023","DA3_030":3.8,"PUB06":"0739-5180709"}],"tt_ver_n":"01","ts_cd":"S03","hasml":false,"ts_un":"0","hasdata":false}],"noAftercal":true}

--- Testing v2.0.57 (fastjson2-2.0.57.jar) ---
num=100 | ALL PASS | 15ms
num=1000 | FAIL at i=394
RuntimeException: java.lang.reflect.InvocationTargetException
InvocationTargetException: null
JSONException: offset 53, character p, line 1, column 53, fastjson-version 2.0.57 {"dataun":"0002020015001011","mlcd":"","uuid":null,"pdcd":"Y2023","bzcode":"DATJ","tt_id":"T2301","datas":[{"data":[{"pdcd":"Y2023","tb_un":"0002020015001011"},{"DA3_078":46,"DA3_028_01":37,"DA3_053":36,"DA3_054":637,"DA3_030_01":3.6,"DA3_029_01":962,"DA3_077":96,"DA3_076":1,"DA3_025_01":1,"DA3_027_01":1,"DA3_026_01":1,"DA3_041_01":4,"DA3_042_01":326,"DA3_053_01":33,"DA3_054_01":636,"PUB05":"xxxxx","PUB08":"xxx","PUB02":"xxx","PUB03":"075","PUB04":"422000","PUB01":"11430511MB10830639","PUB09":"XXX","DA3_076_01":1,"DA3_078_01":45,"DA3_091_01":"2","DA3_092_01":29,"DA3_093_01":35,"DA3_089_01":"2","DA3_025":1,"DA3_026":1,"DA3_090_01":"2","DA3_099_01":18,"DA3_098_01":18,"PUB10":"XX","DA3_098":18,"DA3_099":8,"DA3_041":6,"DA3_042":327,"DA3_093":5,"DA3_092":29,"DA3_027":1,"DA3_028":40,"DA3_029":963,"PUB07":"2023","DA3_030":3.8,"PUB06":"0739-5180709"}],"tt_ver_n":"01","ts_cd":"S03","hasml":false,"ts_un":"0","hasdata":false}],"noAftercal":true}
num=10000 | FAIL at i=1
RuntimeException: java.lang.reflect.InvocationTargetException
InvocationTargetException: null
JSONException: offset 53, character p, line 1, column 53, fastjson-version 2.0.57 {"dataun":"0002020015001011","mlcd":"","uuid":null,"pdcd":"Y2023","bzcode":"DATJ","tt_id":"T2301","datas":[{"data":[{"pdcd":"Y2023","tb_un":"0002020015001011"},{"DA3_078":46,"DA3_028_01":37,"DA3_053":36,"DA3_054":637,"DA3_030_01":3.6,"DA3_029_01":962,"DA3_077":96,"DA3_076":1,"DA3_025_01":1,"DA3_027_01":1,"DA3_026_01":1,"DA3_041_01":4,"DA3_042_01":326,"DA3_053_01":33,"DA3_054_01":636,"PUB05":"xxxxx","PUB08":"xxx","PUB02":"xxx","PUB03":"075","PUB04":"422000","PUB01":"11430511MB10830639","PUB09":"XXX","DA3_076_01":1,"DA3_078_01":45,"DA3_091_01":"2","DA3_092_01":29,"DA3_093_01":35,"DA3_089_01":"2","DA3_025":1,"DA3_026":1,"DA3_090_01":"2","DA3_099_01":18,"DA3_098_01":18,"PUB10":"XX","DA3_098":18,"DA3_099":8,"DA3_041":6,"DA3_042":327,"DA3_093":5,"DA3_092":29,"DA3_027":1,"DA3_028":40,"DA3_029":963,"PUB07":"2023","DA3_030":3.8,"PUB06":"0739-5180709"}],"tt_ver_n":"01","ts_cd":"S03","hasml":false,"ts_un":"0","hasdata":false}],"noAftercal":true}

--- Testing v2.0.56 (fastjson2-2.0.56.jar) ---
num=100 | ALL PASS | 17ms
num=1000 | FAIL at i=379
RuntimeException: java.lang.reflect.InvocationTargetException
InvocationTargetException: null
JSONException: illegal input, offset 425, character ", line 1, column 425, fastjson-version 2.0.56 {"dataun":"0002020015001011","mlcd":"","uuid":null,"pdcd":"Y2023","bzcode":"DATJ","tt_id":"T2301","datas":[{"data":[{"pdcd":"Y2023","tb_un":"0002020015001011"},{"DA3_078":46,"DA3_028_01":37,"DA3_053":36,"DA3_054":637,"DA3_030_01":3.6,"DA3_029_01":962,"DA3_077":96,"DA3_076":1,"DA3_025_01":1,"DA3_027_01":1,"DA3_026_01":1,"DA3_041_01":4,"DA3_042_01":326,"DA3_053_01":33,"DA3_054_01":636,"PUB05":"xxxxx","PUB08":"xxx","PUB02":"xxx","PUB03":"075","PUB04":"422000","PUB01":"11430511MB10830639","PUB09":"XXX","DA3_076_01":1,"DA3_078_01":45,"DA3_091_01":"2","DA3_092_01":29,"DA3_093_01":35,"DA3_089_01":"2","DA3_025":1,"DA3_026":1,"DA3_090_01":"2","DA3_099_01":18,"DA3_098_01":18,"PUB10":"XX","DA3_098":18,"DA3_099":8,"DA3_041":6,"DA3_042":327,"DA3_093":5,"DA3_092":29,"DA3_027":1,"DA3_028":40,"DA3_029":963,"PUB07":"2023","DA3_030":3.8,"PUB06":"0739-5180709"}],"tt_ver_n":"01","ts_cd":"S03","hasml":false,"ts_un":"0","hasdata":false}],"noAftercal":true}
num=10000 | FAIL at i=1
RuntimeException: java.lang.reflect.InvocationTargetException
InvocationTargetException: null
JSONException: offset 53, character p, line 1, column 53, fastjson-version 2.0.56 {"dataun":"0002020015001011","mlcd":"","uuid":null,"pdcd":"Y2023","bzcode":"DATJ","tt_id":"T2301","datas":[{"data":[{"pdcd":"Y2023","tb_un":"0002020015001011"},{"DA3_078":46,"DA3_028_01":37,"DA3_053":36,"DA3_054":637,"DA3_030_01":3.6,"DA3_029_01":962,"DA3_077":96,"DA3_076":1,"DA3_025_01":1,"DA3_027_01":1,"DA3_026_01":1,"DA3_041_01":4,"DA3_042_01":326,"DA3_053_01":33,"DA3_054_01":636,"PUB05":"xxxxx","PUB08":"xxx","PUB02":"xxx","PUB03":"075","PUB04":"422000","PUB01":"11430511MB10830639","PUB09":"XXX","DA3_076_01":1,"DA3_078_01":45,"DA3_091_01":"2","DA3_092_01":29,"DA3_093_01":35,"DA3_089_01":"2","DA3_025":1,"DA3_026":1,"DA3_090_01":"2","DA3_099_01":18,"DA3_098_01":18,"PUB10":"XX","DA3_098":18,"DA3_099":8,"DA3_041":6,"DA3_042":327,"DA3_093":5,"DA3_092":29,"DA3_027":1,"DA3_028":40,"DA3_029":963,"PUB07":"2023","DA3_030":3.8,"PUB06":"0739-5180709"}],"tt_ver_n":"01","ts_cd":"S03","hasml":false,"ts_un":"0","hasdata":false}],"noAftercal":true}

--- Testing v2.0.50 (fastjson2-2.0.50.jar) ---
num=100 | ALL PASS | 14ms
num=1000 | ALL PASS | 34ms
num=10000 | ALL PASS | 132ms

========== Done ==========
```

正常的日志
```shell
/usr/java/zulu8.94.0.17-ca-jdk8.0.492-linux_aarch64/bin/java -jar demo2-1.5-SNAPSHOT.jar
========== Environment ==========
OS: Linux 4.19.90-24.4.v2101.ky10.aarch64 (aarch64)
CPU: HUAWEI,Kunpeng 920 (64 cores)
JDK: 1.8.0_492 (Azul Systems, Inc.)
JVM: OpenJDK 64-Bit Server VM 25.492-b09
Memory: 27278MB max

========== Fastjson2 Multi-Version Test (9 versions) ==========
Extracted jars to: /tmp/fastjson2-multi-version-test-25543304067495770

--- Testing v2.0.62 (fastjson2-2.0.62.jar) ---
num=100 | ALL PASS | 20ms
num=1000 | ALL PASS | 30ms
num=10000 | ALL PASS | 106ms

--- Testing v2.0.53 (fastjson2-2.0.53.jar) ---
num=100 | ALL PASS | 14ms
num=1000 | ALL PASS | 30ms
num=10000 | ALL PASS | 113ms

--- Testing v2.0.54 (fastjson2-2.0.54.jar) ---
num=100 | ALL PASS | 15ms
num=1000 | ALL PASS | 32ms
num=10000 | ALL PASS | 114ms

--- Testing v2.0.48 (fastjson2-2.0.48.jar) ---
num=100 | ALL PASS | 14ms
num=1000 | ALL PASS | 31ms
num=10000 | ALL PASS | 111ms

--- Testing v2.0.61 (fastjson2-2.0.61.jar) ---
num=100 | ALL PASS | 16ms
num=1000 | ALL PASS | 33ms
num=10000 | ALL PASS | 107ms

--- Testing v2.0.56 (fastjson2-2.0.56.jar) ---
num=100 | ALL PASS | 15ms
num=1000 | ALL PASS | 32ms
num=10000 | ALL PASS | 106ms

--- Testing v2.0.57 (fastjson2-2.0.57.jar) ---
num=100 | ALL PASS | 17ms
num=1000 | ALL PASS | 31ms
num=10000 | ALL PASS | 105ms

--- Testing v2.0.55 (fastjson2-2.0.55.jar) ---
num=100 | ALL PASS | 14ms
num=1000 | ALL PASS | 30ms
num=10000 | ALL PASS | 106ms

--- Testing v2.0.50 (fastjson2-2.0.50.jar) ---
num=100 | ALL PASS | 14ms
num=1000 | ALL PASS | 30ms
num=10000 | ALL PASS | 110ms

========== Done ==========
```

Contributor guide

Open the contributing guide

Research direction

Start by reproducing the reported demo2-1.5-SNAPSHOT.jar run with Oracle JDK 1.8.0_351 on the specified Kylin aarch64 environment, then compare repeated parseObject behavior between fastjson2 v2.0.54 and later versions. Done means the supplied reproduction no longer fails without switching JDKs or adding -Djava.compiler=NONE.

Written by the indexing model from the issue text.

Assessment

Tech stack
java
Domain
backend-api-design
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Quiet
Clarity
Mostly clear
Newbie friendliness
48/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.