Skip to content

Commit e7d16c2

Browse files
committed
LANG-1395 - JsonToStringStyle does not escape double quote in a string
value
1 parent 362dd93 commit e7d16c2

File tree

3 files changed

+13
-1
lines changed

3 files changed

+13
-1
lines changed

src/changes/changes.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ The <action> type attribute can be add,update,fix,remove.
4646
<body>
4747

4848
<release version="3.8" date="2018-MM-DD" description="New features and bug fixes. Requires Java 7, supports Java 8, 9, 10.">
49+
<action issue="LANG-1395" type="fix" dev="sebb" due=to="Jim Gan">JsonToStringStyle does not escape double quote in a string value</action>
4950
<action issue="LANG-1384" type="fix" dev="erans" due-to="Ian Young">New Java version ("11") must be handled</action>
5051
<action issue="LANG-1364" type="fix" dev="pschumacher" due-to="Zheng Xie">ExceptionUtils#getRootCause(Throwable t) should return t if no lower level cause exists</action>
5152
<action issue="LANG-1060" type="fix" dev="pschumacher" due-to="Piotr Kosmala">NumberUtils.isNumber assumes number starting with Zero</action>

src/main/java/org/apache/commons/lang3/builder/ToStringStyle.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424

2525
import org.apache.commons.lang3.ClassUtils;
2626
import org.apache.commons.lang3.ObjectUtils;
27+
import org.apache.commons.lang3.StringEscapeUtils;
2728
import org.apache.commons.lang3.StringUtils;
2829

2930
/**
@@ -62,6 +63,7 @@
6263
*
6364
* @since 1.0
6465
*/
66+
@SuppressWarnings("deprecation") // StringEscapeUtils
6567
public abstract class ToStringStyle implements Serializable {
6668

6769
/**
@@ -2606,7 +2608,7 @@ private boolean isJsonObject(final String valueAsString) {
26062608
* @param value the value to append.
26072609
*/
26082610
private void appendValueAsString(final StringBuffer buffer, final String value) {
2609-
buffer.append('"').append(value).append('"');
2611+
buffer.append('"').append(StringEscapeUtils.escapeJson(value)).append('"');
26102612
}
26112613

26122614
@Override

src/test/java/org/apache/commons/lang3/builder/JsonToStringStyleTest.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -378,6 +378,15 @@ public String toString() {
378378
.toString());
379379
}
380380

381+
@Test
382+
public void testLANG1395() {
383+
assertEquals("{\"name\":\"value\"}",new ToStringBuilder(base).append("name","value").toString());
384+
assertEquals("{\"name\":\"\"}",new ToStringBuilder(base).append("name","").toString());
385+
assertEquals("{\"name\":\"\\\"\"}",new ToStringBuilder(base).append("name",'"').toString());
386+
assertEquals("{\"name\":\"\\\\\"}",new ToStringBuilder(base).append("name",'\\').toString());
387+
assertEquals("{\"name\":\"Let's \\\"quote\\\" this\"}",new ToStringBuilder(base).append("name","Let's \"quote\" this").toString());
388+
}
389+
381390
/**
382391
* An object with nested object structures used to test {@link ToStringStyle.JsonToStringStyle}.
383392
*

0 commit comments

Comments
 (0)