Skip to content

[BUG] JSONWriterUTF16.writeName8Raw(long name)方法抛出java.lang.ArrayIndexOutOfBoundsException异常 #2419

Closed
@plliang

Description

问题描述

想要将一个大对象转换为JSON字符串,转换过程中抛出ArrayIndexOutOfBoundsException数组越界异常,debug截图如下:

FastJSON-Debug

进入该方法时,this.off == 27637,计算minCapacity判断是否扩容时,只增加了10个容量,此时27637 + 10 = 27647小于chars.length = 27648,判断为不需要扩容。在执行后续步骤时,实际上会取到11个偏移量,由于chars数组的最大下标为27647,因此造成数组越界。

环境信息

请填写以下信息:

  • OS信息: [Deepin 社区版(20.9) 8Core 3.00GHz 32 GB]
  • JDK信息: [openjdk version "11.0.9.1" 2020-11-04]
  • 版本信息:[Fastjson2 2.0.48]

重现步骤

示例代码如下(内部数据,无法提供):

JSON.config(JSONWriter.Feature.LargeObject, true);  
String jsonString = JSONObject.toJSONString(dataBasePO, SerializerFeature.DisableCircularReferenceDetect);

期待的正确结果

期望能够正确将对象转换为JSON字符串,不要抛出异常。或者通过某些配置能够实现正确转换

相关日志输出

com.alibaba.fastjson.JSONException: toJSONString error
	at com.alibaba.fastjson.JSON.toJSONString(JSON.java:1578)
	at com.uxsino.uxsync.core.infrastructure.repository.impl.MetaDataInFileRepositoryImpl.save(MetaDataInFileRepositoryImpl.java:62)
	at com.uxsino.uxsync.core.domain.service.MetaDataDomainService.save(MetaDataDomainService.java:48)
	at com.uxsino.uxsync.core.app.service.MetaDataAppService.refreshAll(MetaDataAppService.java:51)
	at com.uxsino.db.uxsync.metadata.domain.service.MetaDataDomainService.lambda$submitTask$0(MetaDataDomainService.java:151)
	at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
	at java.base/java.util.concurrent.FutureTask.run$$$capture(FutureTask.java:264)
	at java.base/java.util.concurrent.FutureTask.run(FutureTask.java)
	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
	at java.base/java.lang.Thread.run(Thread.java:834)
Caused by: java.lang.ArrayIndexOutOfBoundsException: Index 27648 out of bounds for length 27648
	at com.alibaba.fastjson2.JSONWriterUTF16.writeName8Raw(JSONWriterUTF16.java:1719)
	at com.alibaba.fastjson2.writer.OWG_7_18_ColumnPO.write(Unknown Source)
	at com.alibaba.fastjson2.writer.FieldWriterList.writeListValue(FieldWriterList.java:218)
	at com.alibaba.fastjson2.writer.OWG_6_15_DataBasePO.write(Unknown Source)
	at com.alibaba.fastjson.JSON.toJSONString(JSON.java:1570)
	... 10 common frames omitted

附加信息

暂无其它信息提供

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't workingfixed

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions