|
@@ -228,7 +228,7 @@ next_op:
|
|
hdr = 2;
|
|
hdr = 2;
|
|
|
|
|
|
/* Extract a tag from the data */
|
|
/* Extract a tag from the data */
|
|
- if (unlikely(dp >= datalen - 1))
|
|
|
|
|
|
+ if (unlikely(datalen - dp < 2))
|
|
goto data_overrun_error;
|
|
goto data_overrun_error;
|
|
tag = data[dp++];
|
|
tag = data[dp++];
|
|
if (unlikely((tag & 0x1f) == ASN1_LONG_TAG))
|
|
if (unlikely((tag & 0x1f) == ASN1_LONG_TAG))
|
|
@@ -274,7 +274,7 @@ next_op:
|
|
int n = len - 0x80;
|
|
int n = len - 0x80;
|
|
if (unlikely(n > 2))
|
|
if (unlikely(n > 2))
|
|
goto length_too_long;
|
|
goto length_too_long;
|
|
- if (unlikely(dp >= datalen - n))
|
|
|
|
|
|
+ if (unlikely(n > datalen - dp))
|
|
goto data_overrun_error;
|
|
goto data_overrun_error;
|
|
hdr += n;
|
|
hdr += n;
|
|
for (len = 0; n > 0; n--) {
|
|
for (len = 0; n > 0; n--) {
|