der_get_octet_string_ber meet reality and now works
git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@24201 ec53bebd-3082-4978-b11e-865c3cabbd6b
This commit is contained in:
@@ -264,13 +264,13 @@ der_get_octet_string_ber (const unsigned char *p, size_t len,
|
|||||||
data->length = 0;
|
data->length = 0;
|
||||||
data->data = NULL;
|
data->data = NULL;
|
||||||
|
|
||||||
while (1) {
|
while (len) {
|
||||||
e = der_get_tag (p, len, &class, &type, &tag, &l);
|
e = der_get_tag (p, len, &class, &type, &tag, &l);
|
||||||
if (e) goto out;
|
if (e) goto out;
|
||||||
if (class != ASN1_C_UNIV) return ASN1_BAD_ID;
|
if (class != ASN1_C_UNIV) return ASN1_BAD_ID;
|
||||||
if (type == PRIM && tag == UT_EndOfContent) {
|
if (type == PRIM && tag == UT_EndOfContent) {
|
||||||
if (depth == 0)
|
if (depth < 1)
|
||||||
break;
|
return ASN1_INDEF_UNDERRUN;
|
||||||
depth--;
|
depth--;
|
||||||
}
|
}
|
||||||
if (tag != UT_OctetString) {
|
if (tag != UT_OctetString) {
|
||||||
@@ -305,6 +305,8 @@ der_get_octet_string_ber (const unsigned char *p, size_t len,
|
|||||||
p += datalen;
|
p += datalen;
|
||||||
len -= datalen;
|
len -= datalen;
|
||||||
}
|
}
|
||||||
|
if (depth != 0)
|
||||||
|
return ASN1_INDEF_OVERRUN;
|
||||||
if(size) *size = oldlen - len;
|
if(size) *size = oldlen - len;
|
||||||
return 0;
|
return 0;
|
||||||
out:
|
out:
|
||||||
|
Reference in New Issue
Block a user