-
-
Notifications
You must be signed in to change notification settings - Fork 144
Closed
Description
The following Java snippet crashes with an ArrayIndexOutOfBoundsException
in CBORParser._finishShortText
:
import java.io.IOException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.dataformat.cbor.CBORFactory;
public class JacksonCborCrash {
public static void main(String[] args) {
byte[] input = {0x66, (byte) 0xef, 0x7d, 0x7d, 0xa, 0x2d, (byte) 0xda};
CBORFactory factory = new CBORFactory();
ObjectMapper mapper = new ObjectMapper(factory);
try {
mapper.readTree(input);
} catch (IOException e) {}
}
}
The stack trace with version 2.12.1 is:
java.lang.ArrayIndexOutOfBoundsException: Index 7 out of bounds for length 7
at com.fasterxml.jackson.dataformat.cbor.CBORParser._finishShortText(CBORParser.java:2203)
at com.fasterxml.jackson.dataformat.cbor.CBORParser._finishTextToken(CBORParser.java:2170)
at com.fasterxml.jackson.dataformat.cbor.CBORParser.getText(CBORParser.java:1530)
at com.fasterxml.jackson.databind.deser.std.BaseNodeDeserializer.deserializeAny(JsonNodeDeserializer.java:545)
at com.fasterxml.jackson.databind.deser.std.JsonNodeDeserializer.deserialize(JsonNodeDeserializer.java:74)
at com.fasterxml.jackson.databind.deser.std.JsonNodeDeserializer.deserialize(JsonNodeDeserializer.java:16)
at com.fasterxml.jackson.databind.deser.DefaultDeserializationContext.readRootValue(DefaultDeserializationContext.java:322)
at com.fasterxml.jackson.databind.ObjectMapper._readTreeAndClose(ObjectMapper.java:4635)
at com.fasterxml.jackson.databind.ObjectMapper.readTree(ObjectMapper.java:3056)
This issue appears to be caused by missing bounds checks in the cases of this switch statement.