Skip to content

Commit b982f07

Browse files
authored
Fix OSS-Fuzz reported issue with SmileParser.getTextLength(), NPE (#423)
1 parent 896dd7f commit b982f07

File tree

5 files changed

+20
-7
lines changed

5 files changed

+20
-7
lines changed

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

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1679,7 +1679,10 @@ public int getTextLength() throws IOException
16791679
|| (_currToken == JsonToken.VALUE_NUMBER_FLOAT)) {
16801680
return getNumberValue().toString().length();
16811681
}
1682-
return _currToken.asCharArray().length;
1682+
final char[] ch = _currToken.asCharArray();
1683+
if (ch != null) {
1684+
return ch.length;
1685+
}
16831686
}
16841687
return 0;
16851688
}

ion/src/main/java/com/fasterxml/jackson/dataformat/ion/IonParser.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -314,7 +314,8 @@ public char[] getTextCharacters() throws IOException {
314314

315315
@Override
316316
public int getTextLength() throws IOException {
317-
return getText().length();
317+
String str = getText();
318+
return (str == null) ? 0 : str.length();
318319
}
319320

320321
@Override

protobuf/src/main/java/com/fasterxml/jackson/dataformat/protobuf/ProtobufParser.java

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1373,13 +1373,15 @@ public int getTextLength() throws IOException
13731373
return _textBuffer.size();
13741374
case FIELD_NAME:
13751375
return _parsingContext.getCurrentName().length();
1376-
// fall through
13771376
case VALUE_NUMBER_INT:
13781377
case VALUE_NUMBER_FLOAT:
13791378
return getNumberValue().toString().length();
1380-
13811379
default:
1382-
return _currToken.asCharArray().length;
1380+
// fall through
1381+
}
1382+
final char[] ch = _currToken.asCharArray();
1383+
if (ch != null) {
1384+
return ch.length;
13831385
}
13841386
}
13851387
return 0;

smile/src/main/java/com/fasterxml/jackson/dataformat/smile/SmileParser.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1139,7 +1139,10 @@ public int getTextLength() throws IOException
11391139
// TODO: optimize
11401140
return getNumberValue().toString().length();
11411141
}
1142-
return _currToken.asCharArray().length;
1142+
final char[] ch = _currToken.asCharArray();
1143+
if (ch != null) {
1144+
return ch.length;
1145+
}
11431146
}
11441147
return 0;
11451148
}

smile/src/main/java/com/fasterxml/jackson/dataformat/smile/async/NonBlockingParserBase.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -328,7 +328,11 @@ public int getTextLength() throws IOException
328328
case JsonTokenId.ID_NOT_AVAILABLE:
329329
return 0; // or throw exception?
330330
default:
331-
return _currToken.asCharArray().length;
331+
final char[] ch = _currToken.asCharArray();
332+
if (ch != null) {
333+
return ch.length;
334+
}
335+
return 0;
332336
}
333337
}
334338

0 commit comments

Comments
 (0)