Skip to content

Commit c3a1216

Browse files
committed
Merge branch '2.18' into 2.19
2 parents 9fcf1e7 + 0aa97a7 commit c3a1216

File tree

2 files changed

+81
-0
lines changed

2 files changed

+81
-0
lines changed

release-notes/VERSION-2.x

+4
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,10 @@ a pure JSON library.
3030
#1391: Fix issue where the parser can read back old number state when
3131
parsing later numbers
3232
(fix contributed by @pjfanning)
33+
#1397: Jackson changes additional values to infinite in case of special
34+
JSON structures and existing infinite values
35+
(reported by @Rodenstock)
36+
(fix contributed by @pjfanning)
3337

3438
2.18.2 (27-Nov-2024)
3539

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
package com.fasterxml.jackson.core.read;
2+
3+
import com.fasterxml.jackson.core.JUnit5TestBase;
4+
import com.fasterxml.jackson.core.JsonParser;
5+
import com.fasterxml.jackson.core.JsonToken;
6+
import com.fasterxml.jackson.core.TokenStreamFactory;
7+
import org.junit.jupiter.api.Test;
8+
9+
import static org.junit.jupiter.api.Assertions.assertEquals;
10+
11+
class NumberParsing1397Test extends JUnit5TestBase
12+
{
13+
private TokenStreamFactory JSON_F = newStreamFactory();
14+
15+
final String radiusValue = "179769313486231570000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000";
16+
final String INPUT_JSON = a2q("{ 'results': [ { " +
17+
"'radius': " + radiusValue + ", " +
18+
"'type': 'center', " +
19+
"'center': { " +
20+
"'x': -11.0, " +
21+
"'y': -2.0 } } ] }");
22+
23+
// [jackson-core#1397]
24+
@Test
25+
public void issue1397() throws Exception
26+
{
27+
for (int mode : ALL_MODES) {
28+
testIssue(JSON_F, mode, INPUT_JSON, true);
29+
testIssue(JSON_F, mode, INPUT_JSON, false);
30+
}
31+
}
32+
33+
private void testIssue(final TokenStreamFactory jsonF,
34+
final int mode,
35+
final String json,
36+
final boolean checkFirstNumValues) throws Exception
37+
{
38+
// checkFirstNumValues=false reproduces the issue in https://github.com/FasterXML/jackson-core/issues/1397
39+
try (JsonParser p = createParser(jsonF, mode, json)) {
40+
assertToken(JsonToken.START_OBJECT, p.nextToken());
41+
assertToken(JsonToken.FIELD_NAME, p.nextToken());
42+
assertEquals("results", p.currentName());
43+
assertToken(JsonToken.START_ARRAY, p.nextToken());
44+
assertToken(JsonToken.START_OBJECT, p.nextToken());
45+
assertToken(JsonToken.FIELD_NAME, p.nextToken());
46+
assertEquals("radius", p.currentName());
47+
assertToken(JsonToken.VALUE_NUMBER_INT, p.nextToken());
48+
assertEquals(JsonParser.NumberType.BIG_INTEGER, p.getNumberType());
49+
assertEquals(radiusValue, p.getNumberValueDeferred());
50+
assertToken(JsonToken.FIELD_NAME, p.nextToken());
51+
assertEquals("type", p.currentName());
52+
assertToken(JsonToken.VALUE_STRING, p.nextToken());
53+
assertEquals("center", p.getText());
54+
assertToken(JsonToken.FIELD_NAME, p.nextToken());
55+
assertEquals("center", p.currentName());
56+
assertToken(JsonToken.START_OBJECT, p.nextToken());
57+
assertToken(JsonToken.FIELD_NAME, p.nextToken());
58+
assertEquals("x", p.currentName());
59+
assertToken(JsonToken.VALUE_NUMBER_FLOAT, p.nextToken());
60+
if (checkFirstNumValues) {
61+
assertEquals(JsonParser.NumberType.DOUBLE, p.getNumberType());
62+
assertEquals(Double.valueOf(-11.0d), p.getNumberValueDeferred());
63+
}
64+
assertEquals(Double.valueOf(-11.0d), p.getDoubleValue());
65+
assertToken(JsonToken.FIELD_NAME, p.nextToken());
66+
assertEquals("y", p.currentName());
67+
assertToken(JsonToken.VALUE_NUMBER_FLOAT, p.nextToken());
68+
assertEquals(JsonParser.NumberType.DOUBLE, p.getNumberType());
69+
assertEquals(Double.valueOf(-2.0d), p.getNumberValueDeferred());
70+
assertEquals(Double.valueOf(-2.0d), p.getDoubleValue());
71+
assertToken(JsonToken.END_OBJECT, p.nextToken());
72+
assertToken(JsonToken.END_OBJECT, p.nextToken());
73+
assertToken(JsonToken.END_ARRAY, p.nextToken());
74+
assertToken(JsonToken.END_OBJECT, p.nextToken());
75+
}
76+
}
77+
}

0 commit comments

Comments
 (0)