From f3a05ad06e8ef57d1034c65a52ef4dcbd647abab Mon Sep 17 00:00:00 2001 From: Pavel Krutikhin Date: Sun, 25 Oct 2020 23:50:29 +0700 Subject: [PATCH] Fixed NPE in writeNumber(String) method of UTF8JsonGenerator and WriterBasedJsonGenerator --- .../jackson/core/json/UTF8JsonGenerator.java | 4 +++- .../jackson/core/json/WriterBasedJsonGenerator.java | 4 +++- .../jackson/core/json/GeneratorFeaturesTest.java | 11 +++++++---- 3 files changed, 13 insertions(+), 6 deletions(-) diff --git a/src/main/java/com/fasterxml/jackson/core/json/UTF8JsonGenerator.java b/src/main/java/com/fasterxml/jackson/core/json/UTF8JsonGenerator.java index 5bc2c5c3a3..2974a78294 100644 --- a/src/main/java/com/fasterxml/jackson/core/json/UTF8JsonGenerator.java +++ b/src/main/java/com/fasterxml/jackson/core/json/UTF8JsonGenerator.java @@ -1054,7 +1054,9 @@ public void writeNumber(BigDecimal value) throws IOException public void writeNumber(String encodedValue) throws IOException { _verifyValueWrite(WRITE_NUMBER); - if (_cfgNumbersAsStrings) { + if (encodedValue == null) { + _writeNull(); + } else if (_cfgNumbersAsStrings) { _writeQuotedRaw(encodedValue); } else { writeRaw(encodedValue); diff --git a/src/main/java/com/fasterxml/jackson/core/json/WriterBasedJsonGenerator.java b/src/main/java/com/fasterxml/jackson/core/json/WriterBasedJsonGenerator.java index 3e3d3bae7e..6b2677ea85 100644 --- a/src/main/java/com/fasterxml/jackson/core/json/WriterBasedJsonGenerator.java +++ b/src/main/java/com/fasterxml/jackson/core/json/WriterBasedJsonGenerator.java @@ -829,7 +829,9 @@ public void writeNumber(BigDecimal value) throws IOException public void writeNumber(String encodedValue) throws IOException { _verifyValueWrite(WRITE_NUMBER); - if (_cfgNumbersAsStrings) { + if (encodedValue == null) { + _writeNull(); + } else if (_cfgNumbersAsStrings) { _writeQuotedRaw(encodedValue); } else { writeRaw(encodedValue); diff --git a/src/test/java/com/fasterxml/jackson/core/json/GeneratorFeaturesTest.java b/src/test/java/com/fasterxml/jackson/core/json/GeneratorFeaturesTest.java index b42a734765..77eaaf9633 100644 --- a/src/test/java/com/fasterxml/jackson/core/json/GeneratorFeaturesTest.java +++ b/src/test/java/com/fasterxml/jackson/core/json/GeneratorFeaturesTest.java @@ -95,16 +95,16 @@ public void testNumbersAsJSONStrings() throws IOException { JsonFactory f = new JsonFactory(); // by default should output numbers as-is: - assertEquals("[1,2,3,1.25,2.25,3001,0.5,-1,12.3]", _writeNumbers(f, false)); - assertEquals("[1,2,3,1.25,2.25,3001,0.5,-1,12.3]", _writeNumbers(f, true)); + assertEquals("[1,2,3,1.25,2.25,3001,0.5,-1,12.3,null,null,null]", _writeNumbers(f, false)); + assertEquals("[1,2,3,1.25,2.25,3001,0.5,-1,12.3,null,null,null]", _writeNumbers(f, true)); // but if overridden, quotes as Strings f = JsonFactory.builder() .enable(JsonWriteFeature.WRITE_NUMBERS_AS_STRINGS) .build(); - assertEquals("[\"1\",\"2\",\"3\",\"1.25\",\"2.25\",\"3001\",\"0.5\",\"-1\",\"12.3\"]", + assertEquals("[\"1\",\"2\",\"3\",\"1.25\",\"2.25\",\"3001\",\"0.5\",\"-1\",\"12.3\",null,null,null]", _writeNumbers(f, false)); - assertEquals("[\"1\",\"2\",\"3\",\"1.25\",\"2.25\",\"3001\",\"0.5\",\"-1\",\"12.3\"]", + assertEquals("[\"1\",\"2\",\"3\",\"1.25\",\"2.25\",\"3001\",\"0.5\",\"-1\",\"12.3\",null,null,null]", _writeNumbers(f, true)); @@ -228,6 +228,9 @@ private String _writeNumbers(JsonFactory f, boolean useBytes) throws IOException g.writeNumber(BigDecimal.valueOf(0.5)); g.writeNumber("-1"); g.writeNumber(new char[]{'1', '2', '.', '3', '-'}, 0, 4); + g.writeNumber((String) null); + g.writeNumber((BigDecimal) null); + g.writeNumber((BigInteger) null); g.writeEndArray(); g.close();