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 : fd_log_level_core_set(3); /* crash on warning log */ 20 18 : return 0; 21 18 : } 22 : 23 : int 24 : LLVMFuzzerTestOneInput( uchar const * data, 25 : ulong data_sz ) { 26 : 27 : fd_tls_msg_hdr_t hdr = {0}; 28 : long res = fd_tls_decode_msg_hdr( &hdr, data, data_sz ); 29 : if( res<0L ) return 0; 30 : FD_TEST( res==4L ); 31 : data += 4UL; 32 : data_sz -= 4UL; 33 : 34 : uint rec_sz = fd_tls_u24_to_uint( hdr.sz ); 35 : if( rec_sz > data_sz ) return 0; 36 : 37 : switch( hdr.type ) { 38 : case FD_TLS_MSG_CLIENT_HELLO: { 39 : fd_tls_client_hello_t ch = {0}; 40 : fd_tls_decode_client_hello( &ch, data, rec_sz ); 41 : break; 42 : } 43 : case FD_TLS_MSG_SERVER_HELLO: { 44 : fd_tls_server_hello_t sh = {0}; 45 : fd_tls_decode_server_hello( &sh, data, rec_sz ); 46 : break; 47 : } 48 : case FD_TLS_MSG_ENCRYPTED_EXT: { 49 : fd_tls_enc_ext_t ee = {0}; 50 : fd_tls_decode_enc_ext( &ee, data, rec_sz ); 51 : break; 52 : } 53 : case FD_TLS_MSG_CERT_VERIFY: { 54 : fd_tls_cert_verify_t cv = {0}; 55 : fd_tls_decode_cert_verify( &cv, data, rec_sz ); 56 : break; 57 : } 58 : case FD_TLS_MSG_FINISHED: { 59 : fd_tls_finished_t fin = {0}; 60 : fd_tls_decode_finished( &fin, data, rec_sz ); 61 : break; 62 : } 63 : } 64 : return 0; 65 : }