Skip to content

Commit 3401f2b

Browse files
committed
Improve SmileGenerator.writeNumber(String) error handling
1 parent b982f07 commit 3401f2b

File tree

1 file changed

+14
-7
lines changed

1 file changed

+14
-7
lines changed

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

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1769,6 +1769,10 @@ public void writeNumber(String encodedValue) throws IOException
17691769

17701770
// Let's see if it's integral or not
17711771
int i = neg ? 1 : 0;
1772+
if (i >= len) {
1773+
_writeIntegralNumber(encodedValue, neg);
1774+
return;
1775+
}
17721776
while (true) {
17731777
char c = encodedValue.charAt(i);
17741778
if (c > '9' || c < '0') {
@@ -1791,22 +1795,25 @@ protected void _writeIntegralNumber(String enc, boolean neg) throws IOException
17911795
// let's do approximate optimization
17921796
try {
17931797
if (len <= 9) {
1794-
writeNumber(Integer.parseInt(enc));
1798+
// Avoid exception from empty String
1799+
if (len > 0) {
1800+
writeNumber(Integer.parseInt(enc));
1801+
}
17951802
} else if (len <= 18) {
17961803
writeNumber(Long.parseLong(enc));
17971804
} else {
1798-
writeNumber(new BigInteger(enc));
1805+
writeNumber(NumberInput.parseBigInteger(enc, false));
17991806
}
1800-
} catch (NumberFormatException e) {
1801-
throw new JsonGenerationException("Invalid String representation for Number ('"+enc
1802-
+"'); can not write using Smile format", this);
1803-
}
1807+
return;
1808+
} catch (NumberFormatException e) { }
1809+
throw new JsonGenerationException("Invalid String representation for Number ('"+enc
1810+
+"'); can not write using Smile format", this);
18041811
}
18051812

18061813
protected void _writeDecimalNumber(String enc) throws IOException
18071814
{
18081815
try {
1809-
writeNumber(NumberInput.parseBigDecimal(enc));
1816+
writeNumber(NumberInput.parseBigDecimal(enc, false));
18101817
} catch (NumberFormatException e) {
18111818
throw new JsonGenerationException("Invalid String representation for Number ('"+enc
18121819
+"'); can not write using Smile format", this);

0 commit comments

Comments
 (0)