| author | |
| committer | |
| log | 3ed159964a34bb73ba484bae95c714449c16b0fc |
| tree | 10d631676b598145385d5c078e49777b4e9a036e |
| parent | bf9b15ee67fb7577e30d66fda879b8af84f84b54 |
| signature |
3 files changed, 51 insertions(+), 0 deletions(-)
test/standalone/build.zig.zon+3| ... | @@ -108,6 +108,9 @@ | ... | @@ -108,6 +108,9 @@ |
| 108 | .libcxx = .{ | 108 | .libcxx = .{ |
| 109 | .path = "libcxx", | 109 | .path = "libcxx", |
| 110 | }, | 110 | }, |
| 111 | .libfuzzer = .{ | ||
| 112 | .path = "libfuzzer", | ||
| 113 | }, | ||
| 111 | .load_dynamic_library = .{ | 114 | .load_dynamic_library = .{ |
| 112 | .path = "load_dynamic_library", | 115 | .path = "load_dynamic_library", |
| 113 | }, | 116 | }, |
test/standalone/libfuzzer/build.zig created+26| ... | @@ -0,0 +1,26 @@ | ||
| 1 | const std = @import("std"); | ||
| 2 | const builtin = @import("builtin"); | ||
| 3 | |||
| 4 | pub fn build(b: *std.Build) void { | ||
| 5 | const target = b.standardTargetOptions(.{}); | ||
| 6 | const optimize = b.standardOptimizeOption(.{}); | ||
| 7 | |||
| 8 | if (builtin.os.tag == .windows) return; // TODO: libfuzzer support for windows | ||
| 9 | |||
| 10 | const run_step = b.step("run", "Run executables"); | ||
| 11 | const exe = b.addExecutable(.{ | ||
| 12 | .name = "main", | ||
| 13 | .root_module = b.createModule(.{ | ||
| 14 | .root_source_file = b.path("main.zig"), | ||
| 15 | .target = target, | ||
| 16 | .optimize = optimize, | ||
| 17 | .fuzz = true, | ||
| 18 | }), | ||
| 19 | }); | ||
| 20 | |||
| 21 | b.installArtifact(exe); | ||
| 22 | b.default_step = run_step; | ||
| 23 | |||
| 24 | const run_artifact = b.addRunArtifact(exe); | ||
| 25 | run_step.dependOn(&run_artifact.step); | ||
| 26 | } | ||
test/standalone/libfuzzer/main.zig created+22| ... | @@ -0,0 +1,22 @@ | ||
| 1 | const std = @import("std"); | ||
| 2 | |||
| 3 | const FuzzerSlice = extern struct { | ||
| 4 | ptr: [*]const u8, | ||
| 5 | len: usize, | ||
| 6 | |||
| 7 | fn fromSlice(s: []const u8) FuzzerSlice { | ||
| 8 | return .{ .ptr = s.ptr, .len = s.len }; | ||
| 9 | } | ||
| 10 | }; | ||
| 11 | |||
| 12 | extern fn fuzzer_set_name(name_ptr: [*]const u8, name_len: usize) void; | ||
| 13 | extern fn fuzzer_init(cache_dir: FuzzerSlice) void; | ||
| 14 | extern fn fuzzer_init_corpus_elem(input_ptr: [*]const u8, input_len: usize) void; | ||
| 15 | extern fn fuzzer_coverage_id() u64; | ||
| 16 | |||
| 17 | pub fn main() !void { | ||
| 18 | fuzzer_init(FuzzerSlice.fromSlice("")); | ||
| 19 | fuzzer_init_corpus_elem("hello".ptr, "hello".len); | ||
| 20 | fuzzer_set_name("test".ptr, "test".len); | ||
| 21 | _ = fuzzer_coverage_id(); | ||
| 22 | } | ||