diff options
author | Alex Gaynor <alex.gaynor@gmail.com> | 2023-02-19 05:43:41 +0100 |
---|---|---|
committer | Matt Caswell <matt@openssl.org> | 2023-02-27 10:29:20 +0100 |
commit | 359d6a26d64c32e7c2bebf5655c70c074f6c805b (patch) | |
tree | a37fa977069a934374c8d25c5b9d1c1716b0f339 /fuzz/smime.c | |
parent | util/find-doc-nits: improve error diagnostics on missing man section numbers ... (diff) | |
download | openssl-359d6a26d64c32e7c2bebf5655c70c074f6c805b.tar.xz openssl-359d6a26d64c32e7c2bebf5655c70c074f6c805b.zip |
Added a fuzzer for SMIME
Reviewed-by: Kurt Roeckx <kurt@roeckx.be>
Reviewed-by: Matt Caswell <matt@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/20332)
Diffstat (limited to 'fuzz/smime.c')
-rw-r--r-- | fuzz/smime.c | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/fuzz/smime.c b/fuzz/smime.c new file mode 100644 index 0000000000..8a4deff2f6 --- /dev/null +++ b/fuzz/smime.c @@ -0,0 +1,49 @@ +/* + * Copyright 2023 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * https://www.openssl.org/source/license.html + * or in the file LICENSE in the source distribution. + */ + +#include "fuzzer.h" +#include <openssl/err.h> +#include <openssl/pkcs7.h> +#include <openssl/x509.h> +#include <stdio.h> + +int FuzzerInitialize(int *argc, char ***argv) +{ + return 1; +} + +int FuzzerTestOneInput(const uint8_t *buf, size_t len) +{ + BIO *b = BIO_new_mem_buf(buf, len); + PKCS7 *p7 = SMIME_read_PKCS7(b, NULL); + + if (p7 != NULL) { + STACK_OF(PKCS7_SIGNER_INFO) *p7si = PKCS7_get_signer_info(p7); + int i; + + for (i = 0; i < sk_PKCS7_SIGNER_INFO_num(p7si); i++) { + STACK_OF(X509_ALGOR) *algs; + + PKCS7_cert_from_signer_info(p7, + sk_PKCS7_SIGNER_INFO_value(p7si, i)); + algs = PKCS7_get_smimecap(sk_PKCS7_SIGNER_INFO_value(p7si, i)); + sk_X509_ALGOR_pop_free(algs, X509_ALGOR_free); + } + PKCS7_free(p7); + } + + BIO_free(b); + ERR_clear_error(); + return 0; +} + +void FuzzerCleanup(void) +{ +} |