#define WINVER 0x0501 #define BUFSIZE 4096 #pragma comment(lib, "Shlwapi.lib") #include #include #include #include #include #include "encoder_format.h" #include using namespace std; extern EncoderFormat encoderFormat; extern "C" int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size); class FuzzingDebugger { public: bool load(wstring fileName) { ifstream file; streampos size; file = ifstream(fileName, ios::in | ios::binary | ios::ate); if (!file.is_open()) return(false); size = file.tellg(); if (size < 1) return(false); _size = size; _data = new char[_size]; file.seekg(0, ios::beg); file.read(_data, size); file.close(); encoderFormat.set(fileName, wstring(PathFindExtension(fileName.c_str()))); return(true); } void start() { const uint8_t *data; data = reinterpret_cast(_data); LLVMFuzzerTestOneInput(data, _size); delete _data; } private: char * _data; size_t _size; }; int wmain(int argc, wchar_t *argv[]) { FuzzingDebugger debugger; int debug; wstring fileName; if (argc == 1) { wchar_t fullPath[BUFSIZE], **lppPart; lppPart = NULL; GetFullPathName(argv[0], BUFSIZE, fullPath, lppPart); PathRemoveExtension(fullPath); fileName = wstring(fullPath) + L".input"; } else fileName = wstring(argv[1]); debug=_CrtSetDbgFlag(_CRTDBG_REPORT_FLAG); debug |= _CRTDBG_DELAY_FREE_MEM_DF; debug |= _CRTDBG_LEAK_CHECK_DF; (void) _CrtSetDbgFlag(debug); //_CrtSetBreakAlloc(42); { if (!debugger.load(fileName)) { wcerr << L"Unable to load " << fileName; cin.get(); } else debugger.start(); } Magick::TerminateMagick(); _CrtCheckMemory(); }