summaryrefslogtreecommitdiff
path: root/java/src/json/ext/StringEncoder.java
diff options
context:
space:
mode:
Diffstat (limited to 'java/src/json/ext/StringEncoder.java')
-rw-r--r--java/src/json/ext/StringEncoder.java10
1 files changed, 8 insertions, 2 deletions
diff --git a/java/src/json/ext/StringEncoder.java b/java/src/json/ext/StringEncoder.java
index 9d40dd3..26678ed 100644
--- a/java/src/json/ext/StringEncoder.java
+++ b/java/src/json/ext/StringEncoder.java
@@ -15,7 +15,7 @@ import org.jruby.util.ByteList;
* and throws a GeneratorError if any problem is found.
*/
final class StringEncoder extends ByteListTranscoder {
- private final boolean asciiOnly;
+ private final boolean asciiOnly, escapeSlash;
// Escaped characters will reuse this array, to avoid new allocations
// or appending them byte-by-byte
@@ -37,9 +37,10 @@ final class StringEncoder extends ByteListTranscoder {
new byte[] {'0', '1', '2', '3', '4', '5', '6', '7',
'8', '9', 'a', 'b', 'c', 'd', 'e', 'f'};
- StringEncoder(ThreadContext context, boolean asciiOnly) {
+ StringEncoder(ThreadContext context, boolean asciiOnly, boolean escapeSlash) {
super(context);
this.asciiOnly = asciiOnly;
+ this.escapeSlash = escapeSlash;
}
void encode(ByteList src, ByteList out) {
@@ -73,6 +74,11 @@ final class StringEncoder extends ByteListTranscoder {
case '\b':
escapeChar('b');
break;
+ case '/':
+ if(escapeSlash) {
+ escapeChar((char)c);
+ break;
+ }
default:
if (c >= 0x20 && c <= 0x7f ||
(c >= 0x80 && !asciiOnly)) {