aboutsummaryrefslogtreecommitdiff
path: root/test/standalone/libfuzzer/main.zig
blob: 21d785866d15ce3b801190d5765d667e7c8e360d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
const std = @import("std");

const FuzzerSlice = extern struct {
    ptr: [*]const u8,
    len: usize,

    fn fromSlice(s: []const u8) FuzzerSlice {
        return .{ .ptr = s.ptr, .len = s.len };
    }
};

extern fn fuzzer_set_name(name_ptr: [*]const u8, name_len: usize) void;
extern fn fuzzer_init(cache_dir: FuzzerSlice) void;
extern fn fuzzer_init_corpus_elem(input_ptr: [*]const u8, input_len: usize) void;
extern fn fuzzer_coverage_id() u64;

pub fn main() !void {
    var gpa: std.heap.GeneralPurposeAllocator(.{}) = .init;
    defer _ = gpa.deinit();
    const args = try std.process.argsAlloc(gpa.allocator());
    defer std.process.argsFree(gpa.allocator(), args);

    const cache_dir = args[1];

    fuzzer_init(FuzzerSlice.fromSlice(cache_dir));
    fuzzer_init_corpus_elem("hello".ptr, "hello".len);
    fuzzer_set_name("test".ptr, "test".len);
    _ = fuzzer_coverage_id();
}