mirror of
https://github.com/openjdk/jdk.git
synced 2025-08-28 15:24:43 +02:00
8264864: Multiple byte tag not supported by ASN.1 encoding
Reviewed-by: xuelei
This commit is contained in:
parent
ccefa5e378
commit
3d2b4cc567
2 changed files with 83 additions and 1 deletions
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (c) 1996, 2020, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 1996, 2021, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
|
@ -221,6 +221,9 @@ public class DerValue {
|
|||
* Creates a new DerValue by specifying all its fields.
|
||||
*/
|
||||
DerValue(byte tag, byte[] buffer, int start, int end, boolean allowBER) {
|
||||
if ((tag & 0x1f) == 0x1f) {
|
||||
throw new IllegalArgumentException("Tag number over 30 is not supported");
|
||||
}
|
||||
this.tag = tag;
|
||||
this.buffer = buffer;
|
||||
this.start = start;
|
||||
|
@ -315,6 +318,9 @@ public class DerValue {
|
|||
}
|
||||
int pos = offset;
|
||||
tag = buf[pos++];
|
||||
if ((tag & 0x1f) == 0x1f) {
|
||||
throw new IOException("Tag number over 30 at " + offset + " is not supported");
|
||||
}
|
||||
int lenByte = buf[pos++];
|
||||
|
||||
int length;
|
||||
|
@ -388,6 +394,9 @@ public class DerValue {
|
|||
// arg to control whether DER checks are enforced.
|
||||
DerValue(InputStream in, boolean allowBER) throws IOException {
|
||||
this.tag = (byte)in.read();
|
||||
if ((tag & 0x1f) == 0x1f) {
|
||||
throw new IOException("Tag number over 30 is not supported");
|
||||
}
|
||||
int length = DerInputStream.getLength(in);
|
||||
if (length == -1) { // indefinite length encoding found
|
||||
if (!allowBER) {
|
||||
|
@ -1140,6 +1149,9 @@ public class DerValue {
|
|||
* @param val the tag value
|
||||
*/
|
||||
public static byte createTag(byte tagClass, boolean form, byte val) {
|
||||
if (val < 0 || val > 30) {
|
||||
throw new IllegalArgumentException("Tag number over 30 is not supported");
|
||||
}
|
||||
byte tag = (byte)(tagClass | val);
|
||||
if (form) {
|
||||
tag |= (byte)0x20;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue