提交 2ab7af7b 编写于 作者: D Dr. Stephen Henson

Print out bad content octets.

If asn1parse doesn't like a structure print out the content octets
for diagnostic purposes.
Reviewed-by: NRichard Levitte <levitte@openssl.org>
上级 e3e6a72e
...@@ -124,7 +124,7 @@ static int asn1_parse2(BIO *bp, const unsigned char **pp, long length, ...@@ -124,7 +124,7 @@ static int asn1_parse2(BIO *bp, const unsigned char **pp, long length,
ASN1_OBJECT *o = NULL; ASN1_OBJECT *o = NULL;
ASN1_OCTET_STRING *os = NULL; ASN1_OCTET_STRING *os = NULL;
/* ASN1_BMPSTRING *bmp=NULL; */ /* ASN1_BMPSTRING *bmp=NULL; */
int dump_indent; int dump_indent, dump_cont = 0;
if (depth > ASN1_PARSE_MAXDEPTH) { if (depth > ASN1_PARSE_MAXDEPTH) {
BIO_puts(bp, "BAD RECURSION DEPTH\n"); BIO_puts(bp, "BAD RECURSION DEPTH\n");
...@@ -221,11 +221,13 @@ static int asn1_parse2(BIO *bp, const unsigned char **pp, long length, ...@@ -221,11 +221,13 @@ static int asn1_parse2(BIO *bp, const unsigned char **pp, long length,
} else { } else {
if (BIO_write(bp, ":BAD OBJECT", 11) <= 0) if (BIO_write(bp, ":BAD OBJECT", 11) <= 0)
goto end; goto end;
dump_cont = 1;
} }
} else if (tag == V_ASN1_BOOLEAN) { } else if (tag == V_ASN1_BOOLEAN) {
if (len != 1) { if (len != 1) {
if (BIO_write(bp, "Bad boolean\n", 12) <= 0) if (BIO_puts(bp, "BAD BOOLEAN") <= 0)
goto end; goto end;
dump_cont = 1;
} }
BIO_printf(bp, ":%u", p[0]); BIO_printf(bp, ":%u", p[0]);
} else if (tag == V_ASN1_BMPSTRING) { } else if (tag == V_ASN1_BMPSTRING) {
...@@ -309,6 +311,7 @@ static int asn1_parse2(BIO *bp, const unsigned char **pp, long length, ...@@ -309,6 +311,7 @@ static int asn1_parse2(BIO *bp, const unsigned char **pp, long length,
} else { } else {
if (BIO_write(bp, "BAD INTEGER", 11) <= 0) if (BIO_write(bp, "BAD INTEGER", 11) <= 0)
goto end; goto end;
dump_cont = 1;
} }
ASN1_INTEGER_free(bs); ASN1_INTEGER_free(bs);
} else if (tag == V_ASN1_ENUMERATED) { } else if (tag == V_ASN1_ENUMERATED) {
...@@ -334,6 +337,7 @@ static int asn1_parse2(BIO *bp, const unsigned char **pp, long length, ...@@ -334,6 +337,7 @@ static int asn1_parse2(BIO *bp, const unsigned char **pp, long length,
} else { } else {
if (BIO_write(bp, "BAD ENUMERATED", 14) <= 0) if (BIO_write(bp, "BAD ENUMERATED", 14) <= 0)
goto end; goto end;
dump_cont = 1;
} }
ASN1_ENUMERATED_free(bs); ASN1_ENUMERATED_free(bs);
} else if (len > 0 && dump) { } else if (len > 0 && dump) {
...@@ -347,6 +351,18 @@ static int asn1_parse2(BIO *bp, const unsigned char **pp, long length, ...@@ -347,6 +351,18 @@ static int asn1_parse2(BIO *bp, const unsigned char **pp, long length,
goto end; goto end;
nl = 1; nl = 1;
} }
if (dump_cont) {
int i;
const unsigned char *tmp = op + hl;
if (BIO_puts(bp, ":[") <= 0)
goto end;
for (i = 0; i < len; i++) {
if (BIO_printf(bp, "%02X", tmp[i]) <= 0)
goto end;
}
if (BIO_puts(bp, "]") <= 0)
goto end;
}
if (!nl) { if (!nl) {
if (BIO_write(bp, "\n", 1) <= 0) if (BIO_write(bp, "\n", 1) <= 0)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册