Skip to content

Commit 27aa8b8

Browse files
committed
FilteringGeneratorDelegate.writeUTF8String() should use delegate.writeUTF8String()
1 parent 931e0e6 commit 27aa8b8

File tree

2 files changed

+58
-4
lines changed

2 files changed

+58
-4
lines changed

src/main/java/com/fasterxml/jackson/core/filter/FilteringGeneratorDelegate.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -375,7 +375,7 @@ public void writeUTF8String(byte[] text, int offset, int length) throws IOExcept
375375
{
376376
// not exact match, but best we can do
377377
if (_checkRawValueWrite()) {
378-
delegate.writeRawUTF8String(text, offset, length);
378+
delegate.writeUTF8String(text, offset, length);
379379
}
380380
}
381381

src/test/java/com/fasterxml/jackson/core/json/TestUtf8Generator.java

Lines changed: 57 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,18 @@
11
package com.fasterxml.jackson.core.json;
22

3-
import java.io.*;
4-
5-
import com.fasterxml.jackson.core.*;
3+
import com.fasterxml.jackson.core.BaseTest;
4+
import com.fasterxml.jackson.core.JsonFactory;
5+
import com.fasterxml.jackson.core.JsonGenerator;
6+
import com.fasterxml.jackson.core.JsonParser;
7+
import com.fasterxml.jackson.core.JsonToken;
8+
import com.fasterxml.jackson.core.filter.FilteringGeneratorDelegate;
9+
import com.fasterxml.jackson.core.filter.JsonPointerBasedFilter;
10+
import com.fasterxml.jackson.core.io.CharTypes;
611
import com.fasterxml.jackson.core.io.IOContext;
712
import com.fasterxml.jackson.core.util.BufferRecycler;
813

14+
import java.io.ByteArrayOutputStream;
15+
916
public class TestUtf8Generator extends BaseTest
1017
{
1118
private final JsonFactory JSON_F = new JsonFactory();
@@ -60,4 +67,51 @@ public void testSurrogatesWithRaw() throws Exception
6067
assertToken(JsonToken.END_ARRAY, jp.nextToken());
6168
jp.close();
6269
}
70+
71+
public void testFilteringWithEscapedChars() throws Exception
72+
{
73+
final String SAMPLE_WITH_QUOTES = "\b\t\f\n\r\"foo\"\u0000";
74+
75+
ByteArrayOutputStream out = new ByteArrayOutputStream();
76+
JsonGenerator jgen = JSON_F.createGenerator(out);
77+
78+
FilteringGeneratorDelegate gen = new FilteringGeneratorDelegate(jgen,
79+
new JsonPointerBasedFilter("/escapes"),
80+
true, // includePath
81+
false // multipleMatches
82+
);
83+
84+
//final String JSON = "{'a':123,'array':[1,2],'escapes':'\b\t\f\n\r\"foo\"\u0000'}";
85+
86+
gen.writeStartObject();
87+
88+
gen.writeFieldName("a");
89+
gen.writeNumber((int) 123);
90+
91+
gen.writeFieldName("array");
92+
gen.writeStartArray();
93+
gen.writeNumber((short) 1);
94+
gen.writeNumber((short) 2);
95+
gen.writeEndArray();
96+
97+
gen.writeFieldName("escapes");
98+
99+
final byte[] raw = SAMPLE_WITH_QUOTES.toString().getBytes("UTF-8");
100+
gen.writeUTF8String(raw, 0, raw.length);
101+
102+
gen.writeEndObject();
103+
gen.close();
104+
105+
JsonParser p = JSON_F.createParser(out.toByteArray());
106+
107+
assertToken(JsonToken.START_OBJECT, p.nextToken());
108+
assertToken(JsonToken.FIELD_NAME, p.nextToken());
109+
assertEquals("escapes", p.getCurrentName());
110+
111+
assertToken(JsonToken.VALUE_STRING, p.nextToken());
112+
assertEquals(SAMPLE_WITH_QUOTES, p.getText());
113+
assertToken(JsonToken.END_OBJECT, p.nextToken());
114+
assertNull(p.nextToken());
115+
p.close();
116+
}
63117
}

0 commit comments

Comments
 (0)