This is an automated email from the ASF dual-hosted git repository.

davsclaus pushed a commit to branch camel-4.10.x
in repository https://gitbox.apache.org/repos/asf/camel.git


The following commit(s) were added to refs/heads/camel-4.10.x by this push:
     new 25571d3424b CAMEL-22068: camel-bindy - Add more corner cases with 
doube-quotes in csv (#18070)
25571d3424b is described below

commit 25571d3424b9c8d5dc22c57cc2c37f37fc221bea
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());
     }
 

Reply via email to