From 2ab7af7b08c5213ae85c2a4aa1c15fe8dfe92137 Mon Sep 17 00:00:00 2001 From: "Dr. Stephen Henson" Date: Wed, 10 Feb 2016 23:54:52 +0000 Subject: [PATCH] Print out bad content octets. If asn1parse doesn't like a structure print out the content octets for diagnostic purposes. Reviewed-by: Richard Levitte --- crypto/asn1/asn1_par.c | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/crypto/asn1/asn1_par.c b/crypto/asn1/asn1_par.c index e65dacd83a..d0de27207a 100644 --- a/crypto/asn1/asn1_par.c +++ b/crypto/asn1/asn1_par.c @@ -124,7 +124,7 @@ static int asn1_parse2(BIO *bp, const unsigned char **pp, long length, ASN1_OBJECT *o = NULL; ASN1_OCTET_STRING *os = NULL; /* ASN1_BMPSTRING *bmp=NULL; */ - int dump_indent; + int dump_indent, dump_cont = 0; if (depth > ASN1_PARSE_MAXDEPTH) { BIO_puts(bp, "BAD RECURSION DEPTH\n"); @@ -221,11 +221,13 @@ static int asn1_parse2(BIO *bp, const unsigned char **pp, long length, } else { if (BIO_write(bp, ":BAD OBJECT", 11) <= 0) goto end; + dump_cont = 1; } } else if (tag == V_ASN1_BOOLEAN) { if (len != 1) { - if (BIO_write(bp, "Bad boolean\n", 12) <= 0) + if (BIO_puts(bp, "BAD BOOLEAN") <= 0) goto end; + dump_cont = 1; } BIO_printf(bp, ":%u", p[0]); } else if (tag == V_ASN1_BMPSTRING) { @@ -309,6 +311,7 @@ static int asn1_parse2(BIO *bp, const unsigned char **pp, long length, } else { if (BIO_write(bp, "BAD INTEGER", 11) <= 0) goto end; + dump_cont = 1; } ASN1_INTEGER_free(bs); } else if (tag == V_ASN1_ENUMERATED) { @@ -334,6 +337,7 @@ static int asn1_parse2(BIO *bp, const unsigned char **pp, long length, } else { if (BIO_write(bp, "BAD ENUMERATED", 14) <= 0) goto end; + dump_cont = 1; } ASN1_ENUMERATED_free(bs); } else if (len > 0 && dump) { @@ -347,6 +351,18 @@ static int asn1_parse2(BIO *bp, const unsigned char **pp, long length, goto end; 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 (BIO_write(bp, "\n", 1) <= 0) -- 2.25.1