You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by hn...@apache.org on 2018/04/18 12:28:25 UTC
[myfaces-tobago] branch master updated: TOBAGO-1892 JsonUtils
doesn't encode quotation marks
This is an automated email from the ASF dual-hosted git repository.
hnoeth pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/myfaces-tobago.git
The following commit(s) were added to refs/heads/master by this push:
new 88f4f04 TOBAGO-1892 JsonUtils doesn't encode quotation marks
88f4f04 is described below
commit 88f4f04c67508c10d491c5c475d0b9eef0270e14
Author: Henning Noeth <hn...@apache.org>
AuthorDate: Wed Apr 18 14:28:17 2018 +0200
TOBAGO-1892 JsonUtils doesn't encode quotation marks
* Encode methods have now an escape attribute. If true, quotation marks will be escaped.
* escape attribute is
** 'false' for SheetRenderer
** 'true' for SuggestRenderer
* added test for JsonUtils.encode string array
---
.../internal/renderkit/renderer/SheetRenderer.java | 2 +-
.../renderkit/renderer/SuggestRenderer.java | 4 +--
.../myfaces/tobago/internal/util/JsonUtils.java | 34 +++++++++++++++-------
.../tobago/internal/util/JsonUtilsUnitTest.java | 4 ++-
4 files changed, 29 insertions(+), 15 deletions(-)
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/SheetRenderer.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/SheetRenderer.java
index 495c933..5afde82 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/SheetRenderer.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/SheetRenderer.java
@@ -334,7 +334,7 @@ public class SheetRenderer extends RendererBase {
}
encodeHiddenInput(writer,
- JsonUtils.encode(encodedRendered.toArray(new String[encodedRendered.size()])),
+ JsonUtils.encode(encodedRendered.toArray(new String[encodedRendered.size()]), false),
sheetId + SUFFIX_COLUMN_RENDERED);
}
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/SuggestRenderer.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/SuggestRenderer.java
index 8692e67..6af65d3 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/SuggestRenderer.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/SuggestRenderer.java
@@ -123,10 +123,10 @@ public class SuggestRenderer extends RendererBase {
writer.writeAttribute(DataAttributes.SUGGEST_MAX_ITEMS, suggest.getMaximumItems());
writer.writeAttribute(DataAttributes.SUGGEST_UPDATE, suggest.isUpdate());
writer.writeAttribute(DataAttributes.SUGGEST_TOTAL_COUNT, totalCount);
- writer.writeAttribute(DataAttributes.SUGGEST_DATA, JsonUtils.encode(array), true);
+ writer.writeAttribute(DataAttributes.SUGGEST_DATA, JsonUtils.encode(array, true), true);
if (LOG.isDebugEnabled()) {
- LOG.debug("suggest list: " + JsonUtils.encode(array));
+ LOG.debug("suggest list: " + JsonUtils.encode(array, true));
}
writer.endElement(HtmlElements.INPUT);
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/util/JsonUtils.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/util/JsonUtils.java
index 70f6e4f..c2205df 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/util/JsonUtils.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/util/JsonUtils.java
@@ -42,15 +42,16 @@ public class JsonUtils {
private JsonUtils() {
}
- private static void encode(final StringBuilder builder, final String name, final String[] value) {
+ private static void encode(final StringBuilder builder, final String name, final String[] value,
+ final boolean escape) {
builder.append("\"");
builder.append(name);
builder.append("\":");
- encode(builder, value);
+ encode(builder, value, escape);
builder.append(",");
}
- public static void encode(final StringBuilder builder, final String[] value) {
+ public static void encode(final StringBuilder builder, final String[] value, final boolean escape) {
builder.append("[");
boolean colon = false;
for (final String item : value) {
@@ -58,7 +59,18 @@ public class JsonUtils {
builder.append(",");
}
builder.append("\"");
- builder.append(item);
+ if (escape) {
+ for (int i = 0; i < item.length(); i++) {
+ final char c = item.charAt(i);
+ if (c == '\"') {
+ builder.append("\\\"");
+ } else {
+ builder.append(c);
+ }
+ }
+ } else {
+ builder.append(item);
+ }
builder.append("\"");
colon = true;
}
@@ -223,11 +235,11 @@ public class JsonUtils {
builder.append("{");
final int initialLength = builder.length();
- encode(builder, "monthNames", dateTimeI18n.getMonthNames());
- encode(builder, "monthNamesShort", dateTimeI18n.getMonthNamesShort());
- encode(builder, "dayNames", dateTimeI18n.getDayNames());
- encode(builder, "dayNamesShort", dateTimeI18n.getDayNamesShort());
- encode(builder, "dayNamesMin", dateTimeI18n.getDayNamesMin());
+ encode(builder, "monthNames", dateTimeI18n.getMonthNames(), false);
+ encode(builder, "monthNamesShort", dateTimeI18n.getMonthNamesShort(), false);
+ encode(builder, "dayNames", dateTimeI18n.getDayNames(), false);
+ encode(builder, "dayNamesShort", dateTimeI18n.getDayNamesShort(), false);
+ encode(builder, "dayNamesMin", dateTimeI18n.getDayNamesMin(), false);
encode(builder, "firstDay", dateTimeI18n.getFirstDay());
if (builder.length() - initialLength > 0) {
@@ -238,12 +250,12 @@ public class JsonUtils {
return builder.toString();
}
- public static String encode(final String[] strings) {
+ public static String encode(final String[] strings, final boolean escape) {
if (strings == null) {
return null;
}
final StringBuilder builder = new StringBuilder();
- encode(builder, strings);
+ encode(builder, strings, escape);
return builder.toString();
}
diff --git a/tobago-core/src/test/java/org/apache/myfaces/tobago/internal/util/JsonUtilsUnitTest.java b/tobago-core/src/test/java/org/apache/myfaces/tobago/internal/util/JsonUtilsUnitTest.java
index 406f4ca..f70a139 100644
--- a/tobago-core/src/test/java/org/apache/myfaces/tobago/internal/util/JsonUtilsUnitTest.java
+++ b/tobago-core/src/test/java/org/apache/myfaces/tobago/internal/util/JsonUtilsUnitTest.java
@@ -156,7 +156,9 @@ public class JsonUtilsUnitTest extends AbstractTobagoTestBase {
@Test
public void encodeStringArray() {
- Assert.assertEquals("[\"A-rập Xê-út (Tiếng A-rập)\"]", JsonUtils.encode(new String[]{"A-rập Xê-út (Tiếng A-rập)"}));
+ Assert.assertEquals("[\"A-rập Xê-út (Tiếng A-rập)\"]", JsonUtils.encode(new String[]{"A-rập Xê-út (Tiếng A-rập)"}, false));
+ Assert.assertEquals("[\"foo\"bar\"]", JsonUtils.encode(new String[]{"foo\"bar"}, false));
+ Assert.assertEquals("[\"foo\\\"bar\"]", JsonUtils.encode(new String[]{"foo\"bar"}, true));
}
@Test
--
To stop receiving notification emails like this one, please contact
hnoeth@apache.org.