import PULS_20180308
This commit is contained in:
+11
-10
@@ -69,7 +69,7 @@ next_tag:
|
||||
|
||||
/* Extract a tag from the data */
|
||||
tag = data[dp++];
|
||||
if (tag == 0) {
|
||||
if (tag == ASN1_EOC) {
|
||||
/* It appears to be an EOC. */
|
||||
if (data[dp++] != 0)
|
||||
goto invalid_eoc;
|
||||
@@ -91,10 +91,8 @@ next_tag:
|
||||
|
||||
/* Extract the length */
|
||||
len = data[dp++];
|
||||
if (len <= 0x7f) {
|
||||
dp += len;
|
||||
goto next_tag;
|
||||
}
|
||||
if (len <= 0x7f)
|
||||
goto check_length;
|
||||
|
||||
if (unlikely(len == ASN1_INDEFINITE_LENGTH)) {
|
||||
/* Indefinite length */
|
||||
@@ -105,14 +103,18 @@ next_tag:
|
||||
}
|
||||
|
||||
n = len - 0x80;
|
||||
if (unlikely(n > sizeof(size_t) - 1))
|
||||
if (unlikely(n > sizeof(len) - 1))
|
||||
goto length_too_long;
|
||||
if (unlikely(n > datalen - dp))
|
||||
goto data_overrun_error;
|
||||
for (len = 0; n > 0; n--) {
|
||||
len = 0;
|
||||
for (; n > 0; n--) {
|
||||
len <<= 8;
|
||||
len |= data[dp++];
|
||||
}
|
||||
check_length:
|
||||
if (len > datalen - dp)
|
||||
goto data_overrun_error;
|
||||
dp += len;
|
||||
goto next_tag;
|
||||
|
||||
@@ -208,9 +210,8 @@ next_op:
|
||||
unsigned char tmp;
|
||||
|
||||
/* Skip conditional matches if possible */
|
||||
if ((op & ASN1_OP_MATCH__COND &&
|
||||
flags & FLAG_MATCHED) ||
|
||||
dp == datalen) {
|
||||
if ((op & ASN1_OP_MATCH__COND && flags & FLAG_MATCHED) ||
|
||||
(op & ASN1_OP_MATCH__SKIP && dp == datalen)) {
|
||||
pc += asn1_op_lengths[op];
|
||||
goto next_op;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user