Commit 2ab7af7b authored by Dr. Stephen Henson's avatar Dr. Stephen Henson
Browse files

Print out bad content octets.



If asn1parse doesn't like a structure print out the content octets
for diagnostic purposes.

Reviewed-by: default avatarRichard Levitte <levitte@openssl.org>
parent e3e6a72e
Loading
Loading
Loading
Loading
+18 −2
Original line number Diff line number Diff line
@@ -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)