Line data Source code
1 : #if !FD_HAS_HOSTED 2 : #error "This target requires FD_HAS_HOSTED" 3 : #endif 4 : 5 : /* fuzz_tls_msg_parser specifically targets the parsers of some complex 6 : message types. It might be obsoleted by fuzz_tls. */ 7 : 8 : #include "fd_tls_proto.h" 9 : 10 : #include <stdlib.h> 11 : 12 : int 13 : LLVMFuzzerInitialize( int * argc, 14 18 : char *** argv ) { 15 : /* Set up shell without signal handlers */ 16 18 : putenv( "FD_LOG_BACKTRACE=0" ); 17 18 : fd_boot( argc, argv ); 18 18 : atexit( fd_halt ); 19 18 : return 0; 20 18 : } 21 : 22 : int 23 : LLVMFuzzerTestOneInput( uchar const * data, 24 : ulong data_sz ) { 25 : 26 : fd_tls_msg_hdr_t hdr = {0}; 27 : long res = fd_tls_decode_msg_hdr( &hdr, data, data_sz ); 28 : if( res<0L ) return 0; 29 : FD_TEST( res==4L ); 30 : data += 4UL; 31 : data_sz -= 4UL; 32 : 33 : uint rec_sz = fd_tls_u24_to_uint( hdr.sz ); 34 : if( rec_sz > data_sz ) return 0; 35 : 36 : switch( hdr.type ) { 37 : case FD_TLS_MSG_CLIENT_HELLO: { 38 : fd_tls_client_hello_t ch = {0}; 39 : fd_tls_decode_client_hello( &ch, data, rec_sz ); 40 : break; 41 : } 42 : case FD_TLS_MSG_SERVER_HELLO: { 43 : fd_tls_server_hello_t sh = {0}; 44 : fd_tls_decode_server_hello( &sh, data, rec_sz ); 45 : break; 46 : } 47 : case FD_TLS_MSG_ENCRYPTED_EXT: { 48 : fd_tls_enc_ext_t ee = {0}; 49 : fd_tls_decode_enc_ext( &ee, data, rec_sz ); 50 : break; 51 : } 52 : case FD_TLS_MSG_CERT_VERIFY: { 53 : fd_tls_cert_verify_t cv = {0}; 54 : fd_tls_decode_cert_verify( &cv, data, rec_sz ); 55 : break; 56 : } 57 : case FD_TLS_MSG_FINISHED: { 58 : fd_tls_finished_t fin = {0}; 59 : fd_tls_decode_finished( &fin, data, rec_sz ); 60 : break; 61 : } 62 : } 63 : return 0; 64 : }