oss-fuzz/projects/giflib/dgif_protobuf_target.cc

27 lines
795 B
C++

#include <stdlib.h>
#include <stdint.h>
#include <string.h>
#include <string>
#include <sstream>
#include <fstream>
#include "dgif_fuzz_common.h"
#include "libprotobuf-mutator/src/libfuzzer/libfuzzer_macro.h"
#include "ProtoToGif.h"
using namespace gifProtoFuzzer;
DEFINE_PROTO_FUZZER(const GifProto &gif_proto)
{
// Instantiate ProtoConverter object
ProtoConverter converter;
std::string gifRawData = converter.gifProtoToString(gif_proto);
if (const char *dump_path = getenv("PROTO_FUZZER_DUMP_PATH"))
{
// With libFuzzer binary run this to generate a GIF from proto:
// PROTO_FUZZER_DUMP_PATH=x.gif ./fuzzer proto-input
std::ofstream of(dump_path);
of.write(gifRawData.data(), gifRawData.size());
}
fuzz_dgif_extended((const uint8_t *)gifRawData.data(), gifRawData.size());
}