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:
Arjen Poutsma
2019-11-25 11:40:53 +01:00
parent 2179b67706
commit c164759c41

View File

@@ -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);
}