From aa5c903a60aa0a70cd6525a32ac40ddaca76f637 Mon Sep 17 00:00:00 2001 From: Donghwan Kim Date: Thu, 12 Sep 2013 21:51:07 +0900 Subject: [PATCH 1/2] Consider other special chars --- .../atmosphere/interceptor/JSONPAtmosphereInterceptor.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/modules/cpr/src/main/java/org/atmosphere/interceptor/JSONPAtmosphereInterceptor.java b/modules/cpr/src/main/java/org/atmosphere/interceptor/JSONPAtmosphereInterceptor.java index 23f1de53b06..b1376969245 100644 --- a/modules/cpr/src/main/java/org/atmosphere/interceptor/JSONPAtmosphereInterceptor.java +++ b/modules/cpr/src/main/java/org/atmosphere/interceptor/JSONPAtmosphereInterceptor.java @@ -42,7 +42,6 @@ public class JSONPAtmosphereInterceptor extends AtmosphereInterceptorAdapter { @Override public Action inspect(AtmosphereResource r) { - final AtmosphereRequest request = r.getRequest(); final AtmosphereResponse response = r.getResponse(); if (r.transport().equals(AtmosphereResource.TRANSPORT.JSONP)) { @@ -82,7 +81,10 @@ public byte[] transformPayload(AtmosphereResponse response, byte[] responseDraft String charEncoding = response.getCharacterEncoding() == null ? "UTF-8" : response.getCharacterEncoding(); // TODO: TOTALLY INEFFICIENT. We MUST uses binary replacement instead. String s = new String(responseDraft, charEncoding); - return s.replace("\"", "\\\"").getBytes(charEncoding); + return s.replaceAll("(['\"\\/])", "\\\\$1") + .replaceAll("\b", "\\\\b").replaceAll("\n", "\\\\n") + .replaceAll("\t", "\\\\t").replaceAll("\f", "\\\\f") + .replaceAll("\r", "\\\\r").getBytes(charEncoding); } return responseDraft; } From 90947546e8708e697992b92cb9a02aef987f76ae Mon Sep 17 00:00:00 2001 From: Donghwan Kim Date: Thu, 12 Sep 2013 21:52:43 +0900 Subject: [PATCH 2/2] Format --- .../interceptor/JSONPAtmosphereInterceptor.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/modules/cpr/src/main/java/org/atmosphere/interceptor/JSONPAtmosphereInterceptor.java b/modules/cpr/src/main/java/org/atmosphere/interceptor/JSONPAtmosphereInterceptor.java index b1376969245..edf9e744bb8 100644 --- a/modules/cpr/src/main/java/org/atmosphere/interceptor/JSONPAtmosphereInterceptor.java +++ b/modules/cpr/src/main/java/org/atmosphere/interceptor/JSONPAtmosphereInterceptor.java @@ -81,10 +81,10 @@ public byte[] transformPayload(AtmosphereResponse response, byte[] responseDraft String charEncoding = response.getCharacterEncoding() == null ? "UTF-8" : response.getCharacterEncoding(); // TODO: TOTALLY INEFFICIENT. We MUST uses binary replacement instead. String s = new String(responseDraft, charEncoding); - return s.replaceAll("(['\"\\/])", "\\\\$1") - .replaceAll("\b", "\\\\b").replaceAll("\n", "\\\\n") - .replaceAll("\t", "\\\\t").replaceAll("\f", "\\\\f") - .replaceAll("\r", "\\\\r").getBytes(charEncoding); + return s.replaceAll("(['\"\\/])", "\\\\$1") + .replaceAll("\b", "\\\\b").replaceAll("\n", "\\\\n") + .replaceAll("\t", "\\\\t").replaceAll("\f", "\\\\f") + .replaceAll("\r", "\\\\r").getBytes(charEncoding); } return responseDraft; }