PerfBigDecimalParser967Test.java
package com.fasterxml.jackson.core.dos;
import java.util.concurrent.TimeUnit;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.Timeout;
import com.fasterxml.jackson.core.*;
import static org.junit.jupiter.api.Assertions.assertNotNull;
import static org.junit.jupiter.api.Assertions.fail;
// For [core#967]
class PerfBigDecimalParser967Test
{
private final JsonFactory JSON_F = new JsonFactory();
// For [core#967]: shouldn't take multiple seconds
@Test
@Timeout(value = 3000, unit = TimeUnit.MILLISECONDS)
void bigDecimalFromString() throws Exception {
// Jackson's BigDecimalParser seems to be slower than JDK's;
// won't fail if using latter.
StringBuilder sb = new StringBuilder(900);
for (int i = 0; i < 500; ++i) {
sb.append('1');
}
sb.append("1e10000000");
final String DOC = sb.toString();
try (JsonParser p = JSON_F.createParser(DOC)) {
assertToken(JsonToken.VALUE_NUMBER_FLOAT, p.nextToken());
assertNotNull(p.getDecimalValue());
}
}
protected void assertToken(JsonToken expToken, JsonToken actToken)
{
if (actToken != expToken) {
fail("Expected token "+expToken+", current token "+actToken);
}
}
}