Skip to content

Commit 7d9be7d

Browse files
committed
Fixing ReaderBasedJsonParser too and adding testcase
1 parent d4d596e commit 7d9be7d

File tree

2 files changed

+93
-1
lines changed

2 files changed

+93
-1
lines changed

src/main/java/com/fasterxml/jackson/core/json/ReaderBasedJsonParser.java

+5-1
Original file line numberDiff line numberDiff line change
@@ -2819,7 +2819,8 @@ protected void _reportInvalidToken(String matchedPart, String msg) throws IOExce
28192819
* regular Java identifier character rules. It's just a heuristic,
28202820
* nothing fancy here.
28212821
*/
2822-
while (true) {
2822+
final int maxTokenLength = 256;
2823+
while (sb.length() < maxTokenLength) {
28232824
if (_inputPtr >= _inputEnd) {
28242825
if (!_loadMore()) {
28252826
break;
@@ -2832,6 +2833,9 @@ protected void _reportInvalidToken(String matchedPart, String msg) throws IOExce
28322833
++_inputPtr;
28332834
sb.append(c);
28342835
}
2836+
if (sb.length() == maxTokenLength) {
2837+
sb.append("...");
2838+
}
28352839
_reportError("Unrecognized token '"+sb.toString()+"': was expecting "+msg);
28362840
}
28372841
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
1+
package com.fasterxml.jackson.core.json;
2+
3+
import com.fasterxml.jackson.core.JsonParseException;
4+
import com.fasterxml.jackson.core.JsonParser;
5+
6+
/**
7+
* Test size of parser error messages
8+
*/
9+
public class TestMaxErrorSize
10+
extends com.fasterxml.jackson.core.BaseTest
11+
{
12+
public void testLongErrorMessage()
13+
throws Exception
14+
{
15+
final String DOC = "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
16+
+ "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
17+
+ "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
18+
+ "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA";
19+
assertTrue(DOC.length() > 256);
20+
JsonParser jp = createParserUsingReader(DOC);
21+
try {
22+
jp.nextToken();
23+
fail("Expected an exception for unrecognized token");
24+
} catch (JsonParseException jpe) {
25+
String msg = jpe.getMessage();
26+
final String expectedPrefix = "Unrecognized token '";
27+
final String expectedSuffix = "...': was expecting ('true', 'false' or 'null')";
28+
assertTrue(msg.startsWith(expectedPrefix));
29+
assertTrue(msg.contains(expectedSuffix));
30+
msg = msg.substring(expectedPrefix.length(), msg.indexOf(expectedSuffix));
31+
assertEquals(256, msg.length());
32+
}
33+
jp.close();
34+
35+
jp = createParser(MODE_INPUT_STREAM, DOC);
36+
try {
37+
jp.nextToken();
38+
fail("Expected an exception for unrecognized token");
39+
} catch (JsonParseException jpe) {
40+
String msg = jpe.getMessage();
41+
final String expectedPrefix = "Unrecognized token '";
42+
final String expectedSuffix = "...': was expecting ('true', 'false' or 'null')";
43+
assertTrue(msg.startsWith(expectedPrefix));
44+
assertTrue(msg.contains(expectedSuffix));
45+
msg = msg.substring(expectedPrefix.length(), msg.indexOf(expectedSuffix));
46+
assertEquals(256, msg.length());
47+
}
48+
jp.close();
49+
}
50+
51+
public void testShortErrorMessage()
52+
throws Exception
53+
{
54+
final String DOC = "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
55+
+ "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA";
56+
assertTrue(DOC.length() < 256);
57+
JsonParser jp = createParserUsingReader(DOC);
58+
try {
59+
jp.nextToken();
60+
fail("Expected an exception for unrecognized token");
61+
} catch (JsonParseException jpe) {
62+
String msg = jpe.getMessage();
63+
final String expectedPrefix = "Unrecognized token '";
64+
final String expectedSuffix = "': was expecting ('true', 'false' or 'null')";
65+
assertTrue(msg.startsWith(expectedPrefix));
66+
assertTrue(msg.contains(expectedSuffix));
67+
msg = msg.substring(expectedPrefix.length(), msg.indexOf(expectedSuffix));
68+
assertEquals(DOC.length(), msg.length());
69+
}
70+
jp.close();
71+
72+
jp = createParser(MODE_INPUT_STREAM, DOC);
73+
try {
74+
jp.nextToken();
75+
fail("Expected an exception for unrecognized token");
76+
} catch (JsonParseException jpe) {
77+
String msg = jpe.getMessage();
78+
final String expectedPrefix = "Unrecognized token '";
79+
final String expectedSuffix = "': was expecting ('true', 'false' or 'null')";
80+
assertTrue(msg.startsWith(expectedPrefix));
81+
assertTrue(msg.contains(expectedSuffix));
82+
msg = msg.substring(expectedPrefix.length(), msg.indexOf(expectedSuffix));
83+
assertEquals(DOC.length(), msg.length());
84+
}
85+
jp.close();
86+
}
87+
}
88+

0 commit comments

Comments
 (0)