Skip to content

Commit 9279965

Browse files
authored
Add NPE handling wrt DeserializationContext.getParser() (#5245)
1 parent 6babf5c commit 9279965

File tree

1 file changed

+13
-6
lines changed

1 file changed

+13
-6
lines changed

src/main/java/com/fasterxml/jackson/databind/deser/std/StdDeserializer.java

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -763,7 +763,7 @@ protected final int _parseIntPrimitive(DeserializationContext ctxt, String text)
763763
{
764764
try {
765765
if (text.length() > 9) {
766-
ctxt.getParser().streamReadConstraints().validateIntegerLength(text.length());
766+
_streamReadConstraints(ctxt).validateIntegerLength(text.length());
767767
long l = NumberInput.parseLong(text);
768768
if (_intOverflow(l)) {
769769
Number v = (Number) ctxt.handleWeirdStringValue(Integer.TYPE, text,
@@ -837,7 +837,7 @@ protected final Integer _parseInteger(DeserializationContext ctxt, String text)
837837
{
838838
try {
839839
if (text.length() > 9) {
840-
ctxt.getParser().streamReadConstraints().validateIntegerLength(text.length());
840+
_streamReadConstraints(ctxt).validateIntegerLength(text.length());
841841
long l = NumberInput.parseLong(text);
842842
if (_intOverflow(l)) {
843843
return (Integer) ctxt.handleWeirdStringValue(Integer.class, text,
@@ -916,7 +916,7 @@ protected final long _parseLongPrimitive(JsonParser p, DeserializationContext ct
916916
*/
917917
protected final long _parseLongPrimitive(DeserializationContext ctxt, String text) throws IOException
918918
{
919-
ctxt.getParser().streamReadConstraints().validateIntegerLength(text.length());
919+
_streamReadConstraints(ctxt).validateIntegerLength(text.length());
920920
try {
921921
return NumberInput.parseLong(text);
922922
} catch (IllegalArgumentException iae) { }
@@ -982,7 +982,7 @@ protected final Long _parseLong(JsonParser p, DeserializationContext ctxt,
982982
*/
983983
protected final Long _parseLong(DeserializationContext ctxt, String text) throws IOException
984984
{
985-
ctxt.getParser().streamReadConstraints().validateIntegerLength(text.length());
985+
_streamReadConstraints(ctxt).validateIntegerLength(text.length());
986986
try {
987987
return NumberInput.parseLong(text);
988988
} catch (IllegalArgumentException iae) { }
@@ -1069,7 +1069,7 @@ protected final float _parseFloatPrimitive(DeserializationContext ctxt, String t
10691069
{
10701070
// 09-Dec-2023, tatu: To avoid parser having to validate input, pre-validate:
10711071
if (NumberInput.looksLikeValidNumber(text)) {
1072-
ctxt.getParser().streamReadConstraints().validateFPLength(text.length());
1072+
_streamReadConstraints(ctxt).validateFPLength(text.length());
10731073
try {
10741074
return NumberInput.parseFloat(text, false);
10751075
} catch (IllegalArgumentException iae) { }
@@ -1087,7 +1087,7 @@ protected final float _parseFloatPrimitive(JsonParser p, DeserializationContext
10871087
{
10881088
// 09-Dec-2023, tatu: To avoid parser having to validate input, pre-validate:
10891089
if (NumberInput.looksLikeValidNumber(text)) {
1090-
ctxt.getParser().streamReadConstraints().validateFPLength(text.length());
1090+
p.streamReadConstraints().validateFPLength(text.length());
10911091
try {
10921092
return NumberInput.parseFloat(text, p.isEnabled(StreamReadFeature.USE_FAST_DOUBLE_PARSER));
10931093
} catch (IllegalArgumentException iae) { }
@@ -2328,4 +2328,11 @@ protected Number _nonNullNumber(Number n) {
23282328
}
23292329
return n;
23302330
}
2331+
2332+
// @since 2.19.3: NPE check for older code that doesn't get JsonParser
2333+
protected StreamReadConstraints _streamReadConstraints(DeserializationContext ctxt) {
2334+
JsonParser p = ctxt.getParser();
2335+
// 29-Jun-2020, tatu: Should not be null, but let's be defensive
2336+
return (p == null) ? StreamReadConstraints.defaults() : p.streamReadConstraints();
2337+
}
23312338
}

0 commit comments

Comments
 (0)