Skip to content

Commit 81bd028

Browse files
committed
Merge branch '2.13' into 2.14
2 parents 2696f49 + 2f293e4 commit 81bd028

File tree

3 files changed

+118
-4
lines changed

3 files changed

+118
-4
lines changed

cbor/src/main/java/com/fasterxml/jackson/dataformat/cbor/CBORParser.java

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2905,9 +2905,9 @@ private final String _findDecodedFromSymbols(final int len) throws IOException
29052905

29062906
// First quadbyte is easy
29072907
int q1 = (inBuf[inPtr++] & 0xFF);
2908-
q1 = (q1 << 8) | (inBuf[inPtr++] & 0xFF);
2909-
q1 = (q1 << 8) | (inBuf[inPtr++] & 0xFF);
2910-
q1 = (q1 << 8) | (inBuf[inPtr++] & 0xFF);
2908+
q1 = (q1 << 8) | (inBuf[inPtr++] & 0xFF);
2909+
q1 = (q1 << 8) | (inBuf[inPtr++] & 0xFF);
2910+
q1 = (q1 << 8) | (inBuf[inPtr++] & 0xFF);
29112911

29122912
if (len < 9) {
29132913
int q2 = (inBuf[inPtr++] & 0xFF);
@@ -3009,7 +3009,15 @@ private final String _addDecodedToSymbols(int len, String name) {
30093009

30103010
private static int[] _growArrayTo(int[] arr, int minSize) {
30113011
return Arrays.copyOf(arr, minSize+4);
3012-
}
3012+
}
3013+
3014+
// Helper method needed to fix [dataformats-binary#312], masking of 0x00 character
3015+
// 26-Feb-2022, tatu: not yet used
3016+
/*
3017+
private final static int _padLastQuad(int q, int bytes) {
3018+
return (bytes == 4) ? q : (q | (-1 << (bytes << 3)));
3019+
}
3020+
*/
30133021

30143022
/*
30153023
/**********************************************************
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
package com.fasterxml.jackson.dataformat.cbor.failing;
2+
3+
import com.fasterxml.jackson.core.JsonParser;
4+
import com.fasterxml.jackson.core.JsonToken;
5+
import com.fasterxml.jackson.databind.ObjectMapper;
6+
import com.fasterxml.jackson.dataformat.cbor.CBORTestBase;
7+
8+
public class SymbolTable312Test extends CBORTestBase
9+
{
10+
private final ObjectMapper MAPPER = cborMapper();
11+
12+
// [dataformats-binary#312]: null handling
13+
public void testNullHandling() throws Exception
14+
{
15+
final String FIELD1 = "\u0000";
16+
final String FIELD2 = FIELD1 + FIELD1;
17+
final String FIELD3 = FIELD2 + FIELD1;
18+
19+
final String QUOTED_NULL = "\\u0000";
20+
21+
final String SRC = a2q(String.format("{'%s':'a','%s':'b','%s':'c'}",
22+
QUOTED_NULL, QUOTED_NULL+QUOTED_NULL, QUOTED_NULL+QUOTED_NULL+QUOTED_NULL));
23+
byte[] DOC = cborDoc(SRC);
24+
25+
try (JsonParser p = MAPPER.createParser(DOC)) {
26+
assertToken(JsonToken.START_OBJECT, p.nextToken());
27+
28+
assertToken(JsonToken.FIELD_NAME, p.nextToken());
29+
_assertNullStrings(FIELD1, p.currentName());
30+
assertToken(JsonToken.VALUE_STRING, p.nextToken());
31+
assertEquals("a", p.getText());
32+
33+
assertToken(JsonToken.FIELD_NAME, p.nextToken());
34+
_assertNullStrings(FIELD2, p.currentName());
35+
assertToken(JsonToken.VALUE_STRING, p.nextToken());
36+
assertEquals("b", p.getText());
37+
38+
assertToken(JsonToken.FIELD_NAME, p.nextToken());
39+
_assertNullStrings(FIELD3, p.currentName());
40+
assertToken(JsonToken.VALUE_STRING, p.nextToken());
41+
assertEquals("c", p.getText());
42+
43+
assertToken(JsonToken.END_OBJECT, p.nextToken());
44+
}
45+
}
46+
47+
private void _assertNullStrings(String exp, String actual) {
48+
if (exp.length() != actual.length()) {
49+
fail("Expected "+exp.length()+" nulls, got "+actual.length());
50+
}
51+
assertEquals(exp, actual);
52+
}
53+
}
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
package com.fasterxml.jackson.dataformat.smile.failing;
2+
3+
import com.fasterxml.jackson.core.JsonParser;
4+
import com.fasterxml.jackson.core.JsonToken;
5+
import com.fasterxml.jackson.databind.ObjectMapper;
6+
import com.fasterxml.jackson.dataformat.smile.BaseTestForSmile;
7+
8+
public class SymbolTable312Test extends BaseTestForSmile
9+
{
10+
private final ObjectMapper MAPPER = smileMapper();
11+
12+
// [dataformats-binary#312]: null handling
13+
public void testNullHandling() throws Exception
14+
{
15+
final String FIELD1 = "\u0000";
16+
final String FIELD2 = FIELD1 + FIELD1;
17+
final String FIELD3 = FIELD2 + FIELD1;
18+
19+
final String QUOTED_NULL = "\\u0000";
20+
21+
final String SRC = a2q(String.format("{'%s':'a','%s':'b','%s':'c'}",
22+
QUOTED_NULL, QUOTED_NULL+QUOTED_NULL, QUOTED_NULL+QUOTED_NULL+QUOTED_NULL));
23+
byte[] DOC = _smileDoc(SRC);
24+
25+
try (JsonParser p = MAPPER.createParser(DOC)) {
26+
assertToken(JsonToken.START_OBJECT, p.nextToken());
27+
28+
assertToken(JsonToken.FIELD_NAME, p.nextToken());
29+
_assertNullStrings(FIELD1, p.currentName());
30+
assertToken(JsonToken.VALUE_STRING, p.nextToken());
31+
assertEquals("a", p.getText());
32+
33+
assertToken(JsonToken.FIELD_NAME, p.nextToken());
34+
_assertNullStrings(FIELD2, p.currentName());
35+
assertToken(JsonToken.VALUE_STRING, p.nextToken());
36+
assertEquals("b", p.getText());
37+
38+
assertToken(JsonToken.FIELD_NAME, p.nextToken());
39+
_assertNullStrings(FIELD3, p.currentName());
40+
assertToken(JsonToken.VALUE_STRING, p.nextToken());
41+
assertEquals("c", p.getText());
42+
43+
assertToken(JsonToken.END_OBJECT, p.nextToken());
44+
}
45+
}
46+
47+
private void _assertNullStrings(String exp, String actual) {
48+
if (exp.length() != actual.length()) {
49+
fail("Expected "+exp.length()+" nulls, got "+actual.length());
50+
}
51+
assertEquals(exp, actual);
52+
}
53+
}

0 commit comments

Comments
 (0)