diff options
| author | Bhargava Shastry <[email protected]> | 2019-05-17 14:22:43 +0200 |
|---|---|---|
| committer | Bhargava Shastry <[email protected]> | 2019-05-17 14:28:20 +0200 |
| commit | 1f3ece9631d3b52911ff7b5fff88fa8fccbbc3f9 (patch) | |
| tree | e4fa00704183a6eca8412d2b1e526d3af4ef284c /oss-fuzz/mruby_proto_fuzzer.cpp | |
| parent | b6e9fab64949b91f00d07c890935642f44147615 (diff) | |
| download | mruby-1f3ece9631d3b52911ff7b5fff88fa8fccbbc3f9.tar.gz mruby-1f3ece9631d3b52911ff7b5fff88fa8fccbbc3f9.zip | |
proto fuzzer: Add source files necessary to compile proto fuzzer
Diffstat (limited to 'oss-fuzz/mruby_proto_fuzzer.cpp')
| -rw-r--r-- | oss-fuzz/mruby_proto_fuzzer.cpp | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/oss-fuzz/mruby_proto_fuzzer.cpp b/oss-fuzz/mruby_proto_fuzzer.cpp new file mode 100644 index 000000000..2999c5470 --- /dev/null +++ b/oss-fuzz/mruby_proto_fuzzer.cpp @@ -0,0 +1,44 @@ +#include <string> +#include <iostream> +#include <fstream> + +#include <mruby.h> +#include <mruby/compile.h> + +#include "libprotobuf-mutator/src/libfuzzer/libfuzzer_macro.h" +#include "ruby.pb.h" +#include "proto_to_ruby.h" + +using namespace ruby_fuzzer; +using namespace std; + +int FuzzRB(const uint8_t *Data, size_t size) { + mrb_value v; + mrb_state *mrb = mrb_open(); + if (!mrb) + return 0; + + char *code = (char *)malloc(size+1); + if (!code) + return 0; + memcpy(code, Data, size); + code[size] = '\0'; + + if (const char *dump_path = getenv("PROTO_FUZZER_DUMP_PATH")) { + // With libFuzzer binary run this to generate an RB file x.rb: + // PROTO_FUZZER_DUMP_PATH=x.rb ./a.out proto-input + std::ofstream of(dump_path); + of.write(code, size); + } + v = mrb_load_string(mrb, code); + mrb_close(mrb); + + free(code); + return 0; +} + +DEFINE_PROTO_FUZZER(const Function &function) { + protoConverter converter; + auto s = converter.FunctionToString(function); + (void)FuzzRB((const uint8_t*)s.data(), s.size()); +} |
