Fix NullPointerException in Jackson2SmileDecoder
Fix uncommon case in Jackson2SmileDecoder, where a null token,
incicating a document separator in streaming mode, is followed by
NOT_AVAILABLE.
Closes gh-24009
(cherry picked from commit 5f3c7ca559)
This commit is contained in:
@@ -120,13 +120,18 @@ final class Jackson2Tokenizer {
|
||||
private List<TokenBuffer> parseTokenBufferFlux() throws IOException {
|
||||
List<TokenBuffer> result = new ArrayList<>();
|
||||
|
||||
while (true) {
|
||||
// SPR-16151: Smile data format uses null to separate documents
|
||||
boolean previousNull = false;
|
||||
while (!this.parser.isClosed()) {
|
||||
JsonToken token = this.parser.nextToken();
|
||||
// SPR-16151: Smile data format uses null to separate documents
|
||||
if (token == JsonToken.NOT_AVAILABLE ||
|
||||
(token == null && (token = this.parser.nextToken()) == null)) {
|
||||
token == null && previousNull) {
|
||||
break;
|
||||
}
|
||||
else if (token == null ) { // !previousNull
|
||||
previousNull = true;
|
||||
continue;
|
||||
}
|
||||
updateDepth(token);
|
||||
if (!this.tokenizeArrayElements) {
|
||||
processTokenNormal(token, result);
|
||||
@@ -167,6 +172,9 @@ final class Jackson2Tokenizer {
|
||||
|
||||
private void processTokenArray(JsonToken token, List<TokenBuffer> result) throws IOException {
|
||||
if (!isTopLevelArrayToken(token)) {
|
||||
if (!this.parser.hasCurrentToken()) {
|
||||
System.out.println("NO CURRENT TOKEN: " + token);
|
||||
}
|
||||
this.tokenBuffer.copyCurrentEvent(this.parser);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user