|  | #include "include/sparse/sparse.h" | 
|  |  | 
|  | static volatile int count; | 
|  |  | 
|  | int WriteCallback(void* priv  __attribute__((__unused__)), const void* data, size_t len) { | 
|  | if (!data) { | 
|  | return 0; | 
|  | } | 
|  | if (len == 0) { | 
|  | return 0; | 
|  | } | 
|  |  | 
|  | const char* p = (const char*)data; | 
|  | // Just to make sure the data is accessible | 
|  | // We only check the head and tail to save time | 
|  | count += *p; | 
|  | count += *(p+len-1); | 
|  | return 0; | 
|  | } | 
|  |  | 
|  | extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) { | 
|  | struct sparse_file* file = sparse_file_import_buf((char*)data, size, true, false); | 
|  | if (!file) { | 
|  | return 0; | 
|  | } | 
|  | int32_t result = sparse_file_callback(file, false, false, WriteCallback, nullptr); | 
|  | sparse_file_destroy(file); | 
|  | return result; | 
|  | } |