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