summaryrefslogtreecommitdiff
path: root/fuzz/main.zig
diff options
context:
space:
mode:
Diffstat (limited to 'fuzz/main.zig')
-rw-r--r--fuzz/main.zig45
1 files changed, 45 insertions, 0 deletions
diff --git a/fuzz/main.zig b/fuzz/main.zig
new file mode 100644
index 0000000..482cbe0
--- /dev/null
+++ b/fuzz/main.zig
@@ -0,0 +1,45 @@
1const std = @import("std");
2const sqlite = @import("sqlite");
3
4pub export fn main() callconv(.C) void {
5 zigMain() catch unreachable;
6}
7
8pub fn zigMain() !void {
9 var gpa = std.heap.GeneralPurposeAllocator(.{}){};
10 defer std.debug.assert(gpa.deinit() == false);
11 const allocator = gpa.allocator();
12
13 // Read the data from stdin
14 const stdin = std.io.getStdIn();
15 const data = try stdin.readToEndAlloc(allocator, std.math.maxInt(usize));
16 defer allocator.free(data);
17
18 var db = try sqlite.Db.init(.{
19 .mode = .Memory,
20 .open_flags = .{
21 .write = true,
22 .create = true,
23 },
24 });
25 defer db.deinit();
26
27 try db.exec("CREATE TABLE test(id integer primary key, name text, data blob)", .{}, .{});
28
29 db.execDynamic(data, .{}, .{}) catch |err| switch (err) {
30 error.SQLiteError => return,
31 else => return err,
32 };
33
34 db.execDynamic(
35 "INSERT INTO test(name, data) VALUES($name, $data)",
36 .{},
37 .{
38 .name = data,
39 .data = data,
40 },
41 ) catch |err| switch (err) {
42 error.SQLiteError => return,
43 else => return err,
44 };
45}