Skip to content

Commit e75a292

Browse files
authored
Fixed NPE in writeNumber(String) method of UTF8JsonGenerator and WriterBasedJsonGenerator (#647)
1 parent 91416f3 commit e75a292

File tree

3 files changed

+13
-6
lines changed

3 files changed

+13
-6
lines changed

src/main/java/com/fasterxml/jackson/core/json/UTF8JsonGenerator.java

+3-1
Original file line numberDiff line numberDiff line change
@@ -1054,7 +1054,9 @@ public void writeNumber(BigDecimal value) throws IOException
10541054
public void writeNumber(String encodedValue) throws IOException
10551055
{
10561056
_verifyValueWrite(WRITE_NUMBER);
1057-
if (_cfgNumbersAsStrings) {
1057+
if (encodedValue == null) {
1058+
_writeNull();
1059+
} else if (_cfgNumbersAsStrings) {
10581060
_writeQuotedRaw(encodedValue);
10591061
} else {
10601062
writeRaw(encodedValue);

src/main/java/com/fasterxml/jackson/core/json/WriterBasedJsonGenerator.java

+3-1
Original file line numberDiff line numberDiff line change
@@ -829,7 +829,9 @@ public void writeNumber(BigDecimal value) throws IOException
829829
public void writeNumber(String encodedValue) throws IOException
830830
{
831831
_verifyValueWrite(WRITE_NUMBER);
832-
if (_cfgNumbersAsStrings) {
832+
if (encodedValue == null) {
833+
_writeNull();
834+
} else if (_cfgNumbersAsStrings) {
833835
_writeQuotedRaw(encodedValue);
834836
} else {
835837
writeRaw(encodedValue);

src/test/java/com/fasterxml/jackson/core/json/GeneratorFeaturesTest.java

+7-4
Original file line numberDiff line numberDiff line change
@@ -95,16 +95,16 @@ public void testNumbersAsJSONStrings() throws IOException
9595
{
9696
JsonFactory f = new JsonFactory();
9797
// by default should output numbers as-is:
98-
assertEquals("[1,2,3,1.25,2.25,3001,0.5,-1,12.3]", _writeNumbers(f, false));
99-
assertEquals("[1,2,3,1.25,2.25,3001,0.5,-1,12.3]", _writeNumbers(f, true));
98+
assertEquals("[1,2,3,1.25,2.25,3001,0.5,-1,12.3,null,null,null]", _writeNumbers(f, false));
99+
assertEquals("[1,2,3,1.25,2.25,3001,0.5,-1,12.3,null,null,null]", _writeNumbers(f, true));
100100

101101
// but if overridden, quotes as Strings
102102
f = JsonFactory.builder()
103103
.enable(JsonWriteFeature.WRITE_NUMBERS_AS_STRINGS)
104104
.build();
105-
assertEquals("[\"1\",\"2\",\"3\",\"1.25\",\"2.25\",\"3001\",\"0.5\",\"-1\",\"12.3\"]",
105+
assertEquals("[\"1\",\"2\",\"3\",\"1.25\",\"2.25\",\"3001\",\"0.5\",\"-1\",\"12.3\",null,null,null]",
106106
_writeNumbers(f, false));
107-
assertEquals("[\"1\",\"2\",\"3\",\"1.25\",\"2.25\",\"3001\",\"0.5\",\"-1\",\"12.3\"]",
107+
assertEquals("[\"1\",\"2\",\"3\",\"1.25\",\"2.25\",\"3001\",\"0.5\",\"-1\",\"12.3\",null,null,null]",
108108
_writeNumbers(f, true));
109109

110110

@@ -228,6 +228,9 @@ private String _writeNumbers(JsonFactory f, boolean useBytes) throws IOException
228228
g.writeNumber(BigDecimal.valueOf(0.5));
229229
g.writeNumber("-1");
230230
g.writeNumber(new char[]{'1', '2', '.', '3', '-'}, 0, 4);
231+
g.writeNumber((String) null);
232+
g.writeNumber((BigDecimal) null);
233+
g.writeNumber((BigInteger) null);
231234
g.writeEndArray();
232235
g.close();
233236

0 commit comments

Comments
 (0)