This is an automated email from the ASF dual-hosted git repository.
davsclaus pushed a commit to branch camel-4.8.x
in repository https://gitbox.apache.org/repos/asf/camel.git
The following commit(s) were added to refs/heads/camel-4.8.x by this push:
new 362ed7004a8 CAMEL-22068: camel-bindy - Add more corner cases with
doube-quotes in csv (#18070)
362ed7004a8 is described below
commit 362ed7004a8c7c30d2c72b0c213f29e5e9893e58
Author: Zheng Feng <[email protected]>
AuthorDate: Fri May 16 13:16:47 2025 +0800
CAMEL-22068: camel-bindy - Add more corner cases with doube-quotes in csv
(#18070)
---
.../apache/camel/dataformat/bindy/csv/BindyCsvDataFormat.java | 8 ++++++--
.../csv/BindySimpleCsvFunctionWithExternalMethodTest.java | 10 +++++-----
2 files changed, 11 insertions(+), 7 deletions(-)
diff --git
a/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/csv/BindyCsvDataFormat.java
b/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/csv/BindyCsvDataFormat.java
index 7c45d62eb52..03328b10d08 100644
---
a/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/csv/BindyCsvDataFormat.java
+++
b/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/csv/BindyCsvDataFormat.java
@@ -333,9 +333,10 @@ public class BindyCsvDataFormat extends
BindyAbstractDataFormat {
if (s.endsWith(quote)) {
boolean escaped = false;
if (quote.equals("\"")) {
- for (int i = s.length() - 2; i > 0; i--) {
+ int i;
+ for (i = s.length() - 2; i > 0; i--) {
char ch = s.charAt(i);
- if (ch == '"' && canStart) {
+ if (ch == '"' && (canStart || inProgress)) {
escaped = !escaped;
} else if (ch == '\\') {
continue;
@@ -343,6 +344,9 @@ public class BindyCsvDataFormat extends
BindyAbstractDataFormat {
break;
}
}
+ if (i == 0 && s.charAt(i) == '"' && inProgress) {
+ escaped = !escaped;
+ }
}
if (!escaped) {
cutEnd = true;
diff --git
a/components/camel-bindy/src/test/java/org/apache/camel/dataformat/bindy/csv/BindySimpleCsvFunctionWithExternalMethodTest.java
b/components/camel-bindy/src/test/java/org/apache/camel/dataformat/bindy/csv/BindySimpleCsvFunctionWithExternalMethodTest.java
index 2e5b10a1439..9fd6323c174 100644
---
a/components/camel-bindy/src/test/java/org/apache/camel/dataformat/bindy/csv/BindySimpleCsvFunctionWithExternalMethodTest.java
+++
b/components/camel-bindy/src/test/java/org/apache/camel/dataformat/bindy/csv/BindySimpleCsvFunctionWithExternalMethodTest.java
@@ -55,11 +55,11 @@ public class BindySimpleCsvFunctionWithExternalMethodTest
extends CamelTestSuppo
mockEndPointMarshal1.expectedMessageCount(1);
mockEndPointMarshal1
.expectedBodiesReceived(
- "\"123\",\"\"\"foo\"\",abc\",\"10\"" +
ConverterUtils.getStringCarriageReturn("WINDOWS"));
+ "\"12\"\",3\",\"abc,d\"\"foo\"\",abc\",\"10\"" +
ConverterUtils.getStringCarriageReturn("WINDOWS"));
BindyCsvRowFormat7621 body = new BindyCsvRowFormat7621();
- body.setFirstField("123");
- body.setSecondField("\"foo\",abc");
+ body.setFirstField("12\",3");
+ body.setSecondField("abc,d\"foo\",abc");
body.setNumber(new BigDecimal(10));
template.sendBody("direct:startMarshal1", body);
@@ -68,8 +68,8 @@ public class BindySimpleCsvFunctionWithExternalMethodTest
extends CamelTestSuppo
BindyCsvRowFormat7621 model
=
mockEndPointUnMarshal1.getReceivedExchanges().get(0).getIn().getBody(BindyCsvRowFormat7621.class);
- assertEquals("123", model.getFirstField());
- assertEquals("\"bar\",abc", model.getSecondField());
+ assertEquals("12\",3", model.getFirstField());
+ assertEquals("abc,d\"bar\",abc", model.getSecondField());
assertEquals(new BigDecimal(10), model.getNumber());
}