8277227: Better identification of OIDs
Reviewed-by: mbaesken
Backport-of: 3ac5f0175356fad40b59f879322fa7d89dfbcaab
diff --git a/src/java.base/share/classes/sun/security/util/ObjectIdentifier.java b/src/java.base/share/classes/sun/security/util/ObjectIdentifier.java
index d151dbc..b74d84e 100644
--- a/src/java.base/share/classes/sun/security/util/ObjectIdentifier.java
+++ b/src/java.base/share/classes/sun/security/util/ObjectIdentifier.java
@@ -435,7 +435,7 @@
if ((encoding[i] & 0x80) == 0) {
// one section [fromPos..i]
if (i - fromPos + 1 > 4) {
- BigInteger big = new BigInteger(pack(encoding, fromPos, i-fromPos+1, 7, 8));
+ BigInteger big = new BigInteger(1, pack(encoding, fromPos, i-fromPos+1, 7, 8));
if (fromPos == 0) {
result[which++] = 2;
BigInteger second = big.subtract(BigInteger.valueOf(80));
@@ -500,7 +500,7 @@
sb.append('.');
}
if (i - fromPos + 1 > 4) { // maybe big integer
- BigInteger big = new BigInteger(pack(encoding, fromPos, i-fromPos+1, 7, 8));
+ BigInteger big = new BigInteger(1, pack(encoding, fromPos, i-fromPos+1, 7, 8));
if (fromPos == 0) {
// first section encoded with more than 4 bytes,
// must be 2.something
@@ -736,6 +736,7 @@
throw new IOException("ObjectIdentifier encoded length was " +
"negative: " + oidLength);
}
+
if (oidLength > MAXIMUM_OID_SIZE) {
throw new IOException(
"ObjectIdentifier encoded length exceeds " +