Skip to content

[BUG] CSVWriter 写入CSV数据超过 65536 个字节时报错 #2848

@CodePlayer

Description

@CodePlayer

问题描述

我们使用 Fastjson2 用于生成 CSV 格式的数据文件。
写入少量数据时,一切表现正常。
然而,当写入超过 65536 个字节的数据时,就会触发如下数组越界异常 。

java.lang.ArrayIndexOutOfBoundsException: Index 65536 out of bounds for length 65536
	at com.alibaba.fastjson2.support.csv.CSVWriterUTF8.writeComma(CSVWriterUTF8.java:52)
	at com.alibaba.fastjson2.support.csv.CSVWriter.writeLine(CSVWriter.java:149)

通过异常堆栈信息得知报错代码位置如下:

public void writeComma() {
if (off + 1 == bytes.length) {
flush();
}
bytes[off++] = ',';
}

如果之前 CSVWriterUTF8.off 已经是 65536,本次再调用 writeComma()方法时,由于 bytes.length 固定是 65536,并不满足 if( off + 1 == bytes.length )if 条件,因此触发越界异常。

此外,我们恰好在该数据量边界写入的是字符串,也得到了一个类似的异常:

java.lang.StringIndexOutOfBoundsException: offset 65532, count 5, length 65536
	at java.base/java.lang.String.checkBoundsOffCount(String.java:4591)
	at java.base/java.lang.String.getBytes(String.java:1734)

环境信息

请填写以下信息:

  • OS信息: CentOS 8.2
  • JDK信息: Openjdk 17
  • 版本信息:Fastjson2 2.0.52

期待的正确结果

正常写入,不再报错。

Metadata

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