Skip to content

NumberUtil.toBigDecimal方法报StackOverflowError #3423

Closed
@PoppingSnack

Description

@PoppingSnack

版本情况

JDK版本: openjdk_8_201
hutool-core: 5.8.23(请确保最新尝试是否还有问题)

问题描述(包括截图)

在hutool-core的5.8.23版本中,调用NumberUtil.toBigDecimal方法时,如果入参为“NaN”,程序会崩溃,报StackOverflowError

  1. 复现代码
import org.junit.Test;
import cn.hutool.core.util.*;
import java.math.BigDecimal;
public class NumberUtilFuzzerToBigDecimal {
    @Test
    public void toBigDecimalFuzzerTest() {
        try {
            BigDecimal result = NumberUtil.toBigDecimal("NaN");
        } catch (Exception e) {
        }
    }
}
  1. 堆栈信息
java.lang.StackOverflowError
	at java.base/sun.util.locale.provider.LocaleResources.getDecimalFormatSymbolsData(LocaleResources.java:172)
	at java.base/java.text.DecimalFormatSymbols.initialize(DecimalFormatSymbols.java:628)
	at java.base/java.text.DecimalFormatSymbols.<init>(DecimalFormatSymbols.java:113)
	at java.base/sun.util.locale.provider.DecimalFormatSymbolsProviderImpl.getInstance(DecimalFormatSymbolsProviderImpl.java:85)
	at java.base/java.text.DecimalFormatSymbols.getInstance(DecimalFormatSymbols.java:180)
	at java.base/sun.util.locale.provider.NumberFormatProviderImpl.getInstance(NumberFormatProviderImpl.java:183)
	at java.base/sun.util.locale.provider.NumberFormatProviderImpl.getNumberInstance(NumberFormatProviderImpl.java:149)
	at java.base/java.text.NumberFormat.getInstance(NumberFormat.java:921)
	at java.base/java.text.NumberFormat.getInstance(NumberFormat.java:907)
	at java.base/java.text.NumberFormat.getInstance(NumberFormat.java:475)
	at cn.hutool.core.util.NumberUtil.parseNumber(NumberUtil.java:2686)
	at cn.hutool.core.util.NumberUtil.toBigDecimal(NumberUtil.java:2250)
	at cn.hutool.core.util.NumberUtil.toBigDecimal(NumberUtil.java:2227)
	at cn.hutool.core.util.NumberUtil.toBigDecimal(NumberUtil.java:2250)
	at cn.hutool.core.util.NumberUtil.toBigDecimal(NumberUtil.java:2227)
	at cn.hutool.core.util.NumberUtil.toBigDecimal(NumberUtil.java:2250)
	at cn.hutool.core.util.NumberUtil.toBigDecimal(NumberUtil.java:2227)
	at cn.hutool.core.util.NumberUtil.toBigDecimal(NumberUtil.java:2250)
	at cn.hutool.core.util.NumberUtil.toBigDecimal(NumberUtil.java:2227)
	at cn.hutool.core.util.NumberUtil.toBigDecimal(NumberUtil.java:2250)
	at cn.hutool.core.util.NumberUtil.toBigDecimal(NumberUtil.java:2227)
	at cn.hutool.core.util.NumberUtil.toBigDecimal(NumberUtil.java:2250)
	at cn.hutool.core.util.NumberUtil.toBigDecimal(NumberUtil.java:2227)
	at cn.hutool.core.util.NumberUtil.toBigDecimal(NumberUtil.java:2250)
	at cn.hutool.core.util.NumberUtil.toBigDecimal(NumberUtil.java:2227)
	at cn.hutool.core.util.NumberUtil.toBigDecimal(NumberUtil.java:2250)
	at cn.hutool.core.util.NumberUtil.toBigDecimal(NumberUtil.java:2227)
	at cn.hutool.core.util.NumberUtil.toBigDecimal(NumberUtil.java:2250)
	at cn.hutool.core.util.NumberUtil.toBigDecimal(NumberUtil.java:2227)
	at cn.hutool.core.util.NumberUtil.toBigDecimal(NumberUtil.java:2250)
	at cn.hutool.core.util.NumberUtil.toBigDecimal(NumberUtil.java:2227)
	at cn.hutool.core.util.NumberUtil.toBigDecimal(NumberUtil.java:2250)
	at cn.hutool.core.util.NumberUtil.toBigDecimal(NumberUtil.java:2227)
	at cn.hutool.core.util.NumberUtil.toBigDecimal(NumberUtil.java:2250)
	at cn.hutool.core.util.NumberUtil.toBigDecimal(NumberUtil.java:2227)
	at cn.hutool.core.util.NumberUtil.toBigDecimal(NumberUtil.java:2250)
	at cn.hutool.core.util.NumberUtil.toBigDecimal(NumberUtil.java:2227)
	at cn.hutool.core.util.NumberUtil.toBigDecimal(NumberUtil.java:2250)
	at cn.hutool.core.util.NumberUtil.toBigDecimal(NumberUtil.java:2227)
	at cn.hutool.core.util.NumberUtil.toBigDecimal(NumberUtil.java:2250)
	at cn.hutool.core.util.NumberUtil.toBigDecimal(NumberUtil.java:2227)
	at cn.hutool.core.util.NumberUtil.toBigDecimal(NumberUtil.java:2250)
	at cn.hutool.core.util.NumberUtil.toBigDecimal(NumberUtil.java:2227)
	at cn.hutool.core.util.NumberUtil.toBigDecimal(NumberUtil.java:2250)
	at cn.hutool.core.util.NumberUtil.toBigDecimal(NumberUtil.java:2227)
	at cn.hutool.core.util.NumberUtil.toBigDecimal(NumberUtil.java:2250)
	at cn.hutool.core.util.NumberUtil.toBigDecimal(NumberUtil.java:2227)
	at cn.hutool.core.util.NumberUtil.toBigDecimal(NumberUtil.java:2250)
	at cn.hutool.core.util.NumberUtil.toBigDecimal(NumberUtil.java:2227)
	at cn.hutool.core.util.NumberUtil.toBigDecimal(NumberUtil.java:2250)
	at cn.hutool.core.util.NumberUtil.toBigDecimal(NumberUtil.java:2227)
	at cn.hutool.core.util.NumberUtil.toBigDecimal(NumberUtil.java:2250)
	at cn.hutool.core.util.NumberUtil.toBigDecimal(NumberUtil.java:2227)
	at cn.hutool.core.util.NumberUtil.toBigDecimal(NumberUtil.java:2250)
	at cn.hutool.core.util.NumberUtil.toBigDecimal(NumberUtil.java:2227)
	at cn.hutool.core.util.NumberUtil.toBigDecimal(NumberUtil.java:2250)
	at cn.hutool.core.util.NumberUtil.toBigDecimal(NumberUtil.java:2227)
	at cn.hutool.core.util.NumberUtil.toBigDecimal(NumberUtil.java:2250)
	at cn.hutool.core.util.NumberUtil.toBigDecimal(NumberUtil.java:2227)
	at cn.hutool.core.util.NumberUtil.toBigDecimal(NumberUtil.java:2250)
	at cn.hutool.core.util.NumberUtil.toBigDecimal(NumberUtil.java:2227)
	at cn.hutool.core.util.NumberUtil.toBigDecimal(NumberUtil.java:2250)
	at cn.hutool.core.util.NumberUtil.toBigDecimal(NumberUtil.java:2227)
	at cn.hutool.core.util.NumberUtil.toBigDecimal(NumberUtil.java:2250)
	at cn.hutool.core.util.NumberUtil.toBigDecimal(NumberUtil.java:2227)
	at cn.hutool.core.util.NumberUtil.toBigDecimal(NumberUtil.java:2250)
	at cn.hutool.core.util.NumberUtil.toBigDecimal(NumberUtil.java:2227)
	at cn.hutool.core.util.NumberUtil.toBigDecimal(NumberUtil.java:2250)
	at cn.hutool.core.util.NumberUtil.toBigDecimal(NumberUtil.java:2227)
	at cn.hutool.core.util.NumberUtil.toBigDecimal(NumberUtil.java:2250)
	at cn.hutool.core.util.NumberUtil.toBigDecimal(NumberUtil.java:2227)
	at cn.hutool.core.util.NumberUtil.toBigDecimal(NumberUtil.java:2250)
	at cn.hutool.core.util.NumberUtil.toBigDecimal(NumberUtil.java:2227)
	at cn.hutool.core.util.NumberUtil.toBigDecimal(NumberUtil.java:2250)
	at cn.hutool.core.util.NumberUtil.toBigDecimal(NumberUtil.java:2227)
	at cn.hutool.core.util.NumberUtil.toBigDecimal(NumberUtil.java:2250)
	at cn.hutool.core.util.NumberUtil.toBigDecimal(NumberUtil.java:2227)
	at cn.hutool.core.util.NumberUtil.toBigDecimal(NumberUtil.java:2250)
	at cn.hutool.core.util.NumberUtil.toBigDecimal(NumberUtil.java:2227)
	at cn.hutool.core.util.NumberUtil.toBigDecimal(NumberUtil.java:2250)
	at cn.hutool.core.util.NumberUtil.toBigDecimal(NumberUtil.java:2227)
	at cn.hutool.core.util.NumberUtil.toBigDecimal(NumberUtil.java:2250)
	at cn.hutool.core.util.NumberUtil.toBigDecimal(NumberUtil.java:2227)
	at cn.hutool.core.util.NumberUtil.toBigDecimal(NumberUtil.java:2250)
        ...

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions