#include <assert.h> | |
#include <openssl/ssl.h> | |
struct GlobalState { | |
GlobalState() : ctx(SSL_CTX_new(SSLv23_method())) {} | |
~GlobalState() { | |
SSL_CTX_free(ctx); | |
} | |
SSL_CTX *const ctx; | |
}; | |
static GlobalState g_state; | |
extern "C" int LLVMFuzzerTestOneInput(uint8_t *buf, size_t len) { | |
// This only fuzzes the initial flow from the server so far. | |
SSL *client = SSL_new(g_state.ctx); | |
BIO *in = BIO_new(BIO_s_mem()); | |
BIO *out = BIO_new(BIO_s_mem()); | |
SSL_set_bio(client, in, out); | |
SSL_set_connect_state(client); | |
BIO_write(in, buf, len); | |
SSL_do_handshake(client); | |
SSL_free(client); | |
return 0; | |
} |