MCPcopy Create free account
hub / github.com/cgsecurity/testdisk / LLVMFuzzerTestOneInput

Function LLVMFuzzerTestOneInput

src/fuzzerfidentify.cpp:55–131  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

53extern file_check_list_t file_check_list;
54
55extern "C" int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size)
56{
57 const size_t blocksize=65536;
58 static unsigned char *buffer_start=NULL;
59 static file_stat_t *file_stats=NULL;
60 static char *filename=NULL;
61 uint8_t *buffer;
62 if(Size == 0)
63 return 0;
64 if(filename==NULL)
65 {
66 pid_t pid=getpid();
67 filename=(char *)MALLOC(64);
68 sprintf(filename, "sample%u", pid);
69 }
70 if(file_stats==NULL)
71 {
72 /* Enable all file formats */
73 file_enable_t *file_enable;
74 for(file_enable=array_file_enable;file_enable->file_hint!=NULL;file_enable++)
75 file_enable->enable=1;
76 file_stats=init_file_stats(array_file_enable);
77 }
78 if(buffer_start==NULL)
79 {
80 buffer_start=(unsigned char *)MALLOC(2*blocksize);
81 }
82 buffer=buffer_start+blocksize;
83 memcpy(buffer, Data, (Size < blocksize ? Size : blocksize));
84 {
85 struct td_list_head *tmpl;
86 file_recovery_t file_recovery_new;
87 file_recovery_t file_recovery;
88 reset_file_recovery(&file_recovery);
89 file_recovery.blocksize=blocksize;
90 file_recovery_new.blocksize=blocksize;
91 file_recovery_new.file_stat=NULL;
92 td_list_for_each(tmpl, &file_check_list.list)
93 {
94 struct td_list_head *tmp;
95 const file_check_list_t *pos=td_list_entry_const(tmpl, const file_check_list_t, list);
96 if(pos->offset <= blocksize)
97 {
98 td_list_for_each(tmp, &pos->file_checks[buffer[pos->offset]].list)
99 {
100 const file_check_t *file_check=td_list_entry_const(tmp, const file_check_t, list);
101 if((file_check->length==0 ||
102 (file_check->offset+file_check->length <=blocksize &&
103 memcmp(buffer + file_check->offset, file_check->value, file_check->length)==0)) &&
104 file_check->header_check(buffer, blocksize, 0, &file_recovery, &file_recovery_new)!=0)
105 {
106 file_recovery_new.file_stat=file_check->file_stat;
107 break;
108 }
109 }
110 }
111 if(file_recovery_new.file_stat!=NULL)
112 break;

Callers

nothing calls this directly

Calls 4

MALLOCFunction · 0.85
init_file_statsFunction · 0.85
reset_file_recoveryFunction · 0.85
td_list_for_eachFunction · 0.70

Tested by

no test coverage detected