fastjson2
fastjson2 copied to clipboard
[BUG]CSVWriter 写入CSV数据超过 65536 个字节时报错 [漏网之鱼]
之前是在 #2848 的评论中补充,不过该 ISSUE 已经被关闭,也无法重新开启,所以在此再次反馈,以免被忽略。
还有几个方法存在类似的 bug,此处不再赘述,可以直接参考 #2848 的补充评论。
@wenshao 用新版本测试了下,writeBigDecimal 的问题已经解决了,不过又发现了一个类似的 bug。
OutputStreamWriter out = new OutputStreamWriter(new ByteArrayOutputStream(), StandardCharsets.UTF_8);
try (CSVWriter writer = CSVWriter.of(out)) {
writer.writeValue("1".repeat(65534));
writer.writeComma();
writer.writeString("123"); // java.lang.StringIndexOutOfBoundsException: offset 65535, count 3, length 65536
}
https://github.com/alibaba/fastjson2/blob/a122b8d58133c429f85a954546d12df2eb233265/core/src/main/java/com/alibaba/fastjson2/support/csv/CSVWriterUTF16.java#L141-L149
定位了下,如上所示,是 CSVWriterUTF16 的 142 行代码处没有 预先检测数组容量 所致。
错误堆栈信息如下:
java.lang.StringIndexOutOfBoundsException: offset 65535, count 3, length 65536
at java.base/java.lang.String.checkBoundsOffCount(String.java:4593)
at java.base/java.lang.String.getChars(String.java:1681)
at com.alibaba.fastjson2.support.csv.CSVWriterUTF16.writeString(CSVWriterUTF16.java:142)
at test.FastjsonTest.test(FastjsonTest.java:56)
发现这些 bug 有些随机,必须要恰好构造出符合特定条件的数据才能出现。
Originally posted by @CodePlayer in https://github.com/alibaba/fastjson2/issues/2848#issuecomment-2358258198