diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index 42b7a569..0b854b7d 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -50,6 +50,7 @@
[StepSecurity] CI: Harden GitHub Actions #329, #330.
Better error message during faulty CSV record read #347.
Misleading error message when QuoteMode set to None #352.
+ OutOfMemory for very long rows despite using column value of type Reader.
Bump commons-io:commons-io: from 2.11.0 to 2.15.1.
Bump commons-parent from 57 to 67.
diff --git a/src/main/java/org/apache/commons/csv/CSVFormat.java b/src/main/java/org/apache/commons/csv/CSVFormat.java
index c0c36ded..40b2d007 100644
--- a/src/main/java/org/apache/commons/csv/CSVFormat.java
+++ b/src/main/java/org/apache/commons/csv/CSVFormat.java
@@ -2325,28 +2325,13 @@ public final class CSVFormat implements Serializable {
final char quote = getQuoteCharacter().charValue();
// (1) Append opening quote
append(quote, appendable);
- // (2) Append Reader content
- final StringBuilder builder = new StringBuilder(IOUtils.DEFAULT_BUFFER_SIZE);
+ // (2) Append Reader contents, doubling quotes
int c;
- int pos = 0;
while (EOF != (c = reader.read())) {
- builder.append((char) c);
+ append((char) c, appendable);
if (c == quote) {
- // Append current segment
- if (pos > 0) {
- append(builder.toString(), appendable);
- // Recycle builder
- builder.setLength(0);
- pos = -1;
- }
- // Append nested quote
append(quote, appendable);
}
- pos++;
- }
- // Append last segment
- if (pos > 0) {
- append(builder.substring(0, pos), appendable);
}
// (3) Append closing quote
append(quote, appendable);