diff --git a/fuzz/asn1.c b/fuzz/asn1.c index f7b5571d4f7d2d3e21352232b2dc32332c38fe20..f29fde5d4de6c31e5616def766c54a4e8351a1d3 100644 --- a/fuzz/asn1.c +++ b/fuzz/asn1.c @@ -27,6 +27,7 @@ #include #include #include +#include #include "fuzzer.h" static ASN1_ITEM_EXP *item_type[] = { @@ -183,8 +184,21 @@ static ASN1_ITEM_EXP *item_type[] = { NULL }; +static ASN1_PCTX *pctx; + int FuzzerInitialize(int *argc, char ***argv) { + pctx = ASN1_PCTX_new(); + ASN1_PCTX_set_flags(pctx, ASN1_PCTX_FLAGS_SHOW_ABSENT | + ASN1_PCTX_FLAGS_SHOW_SEQUENCE | ASN1_PCTX_FLAGS_SHOW_SSOF | + ASN1_PCTX_FLAGS_SHOW_TYPE | ASN1_PCTX_FLAGS_SHOW_FIELD_STRUCT_NAME); + ASN1_PCTX_set_str_flags(pctx, ASN1_STRFLGS_UTF8_CONVERT | + ASN1_STRFLGS_SHOW_TYPE | ASN1_STRFLGS_DUMP_ALL); + + OPENSSL_init_crypto(OPENSSL_INIT_LOAD_CRYPTO_STRINGS, NULL); + ERR_get_state(); + CRYPTO_free_ex_index(0, -1); + return 1; } @@ -192,13 +206,6 @@ int FuzzerTestOneInput(const uint8_t *buf, size_t len) { int n; - ASN1_PCTX *pctx = ASN1_PCTX_new(); - - ASN1_PCTX_set_flags(pctx, ASN1_PCTX_FLAGS_SHOW_ABSENT | - ASN1_PCTX_FLAGS_SHOW_SEQUENCE | ASN1_PCTX_FLAGS_SHOW_SSOF | - ASN1_PCTX_FLAGS_SHOW_TYPE | ASN1_PCTX_FLAGS_SHOW_FIELD_STRUCT_NAME); - ASN1_PCTX_set_str_flags(pctx, ASN1_STRFLGS_UTF8_CONVERT | - ASN1_STRFLGS_SHOW_TYPE | ASN1_STRFLGS_DUMP_ALL); for (n = 0; item_type[n] != NULL; ++n) { const uint8_t *b = buf; @@ -218,11 +225,12 @@ int FuzzerTestOneInput(const uint8_t *buf, size_t len) } } - ASN1_PCTX_free(pctx); + ERR_clear_error(); return 0; } void FuzzerCleanup(void) { + ASN1_PCTX_free(pctx); }