Line data Source code
1 : #if !FD_HAS_HOSTED 2 : #error "This target requires FD_HAS_HOSTED" 3 : #endif 4 : 5 : #include <assert.h> 6 : #include <stdio.h> 7 : #include <stdlib.h> 8 : 9 : #include "../../util/fd_util.h" 10 : #include "../../util/sanitize/fd_fuzz.h" 11 : 12 : #include "fd_base64.h" 13 : 14 : /* fuzz_base64_enc verifies that decode(encode(x)) is the identity 15 : function. */ 16 : 17 : int 18 : LLVMFuzzerInitialize( int * argc, 19 12 : char *** argv ) { 20 : /* Set up shell without signal handlers */ 21 12 : putenv( "FD_LOG_BACKTRACE=0" ); 22 12 : setenv( "FD_LOG_PATH", "", 0 ); 23 12 : fd_boot( argc, argv ); 24 12 : atexit( fd_halt ); 25 12 : fd_log_level_core_set(3); /* crash on warning log */ 26 12 : return 0; 27 12 : } 28 : 29 : int 30 : LLVMFuzzerTestOneInput( uchar const * data, 31 : ulong data_sz ) { 32 : 33 : ulong enc_sz = FD_BASE64_ENC_SZ( data_sz ); 34 : char * enc = malloc( enc_sz ); 35 : assert( enc ); 36 : 37 : ulong enc_res = fd_base64_encode( enc, data, data_sz ); 38 : assert( enc_res==enc_sz ); 39 : 40 : ulong dec_sz = FD_BASE64_DEC_SZ( enc_sz ); 41 : assert( dec_sz <= data_sz+3UL ); 42 : 43 : uchar * dec = malloc( dec_sz ); 44 : assert( dec ); 45 : 46 : long dec_res = fd_base64_decode( dec, enc, enc_sz ); 47 : assert( dec_res>= 0L ); 48 : assert( (ulong)dec_res<= dec_sz ); 49 : assert( (ulong)dec_res==data_sz ); 50 : 51 : assert( 0==memcmp( dec, data, data_sz ) ); 52 : 53 : free( enc ); 54 : free( dec ); 55 : FD_FUZZ_MUST_BE_COVERED; 56 : return 0; 57 : }