summaryrefslogtreecommitdiff
path: root/fuzz/main.zig
diff options
context:
space:
mode:
Diffstat (limited to 'fuzz/main.zig')
-rw-r--r--fuzz/main.zig75
1 files changed, 0 insertions, 75 deletions
diff --git a/fuzz/main.zig b/fuzz/main.zig
deleted file mode 100644
index 496409c..0000000
--- a/fuzz/main.zig
+++ /dev/null
@@ -1,75 +0,0 @@
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() == .ok);
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 error.ExecReturnedData => return,
32 else => return err,
33 };
34
35 db.execDynamic(
36 "INSERT INTO test(name, data) VALUES($name, $data)",
37 .{},
38 .{
39 .name = data,
40 .data = data,
41 },
42 ) catch |err| switch (err) {
43 error.SQLiteError => return,
44 else => return err,
45 };
46
47 var stmt = db.prepareDynamic("SELECT name, data FROM test") catch |err| switch (err) {
48 error.SQLiteError => return,
49 else => return err,
50 };
51 defer stmt.deinit();
52
53 var rows_arena = std.heap.ArenaAllocator.init(allocator);
54 defer rows_arena.deinit();
55
56 const row_opt = stmt.oneAlloc(
57 struct {
58 name: sqlite.Text,
59 data: sqlite.Blob,
60 },
61 rows_arena.allocator(),
62 .{},
63 .{},
64 ) catch |err| switch (err) {
65 error.SQLiteError => return,
66 else => return err,
67 };
68
69 if (row_opt) |row| {
70 if (!std.mem.eql(u8, row.name.data, data)) return error.InvalidNameField;
71 if (!std.mem.eql(u8, row.data.data, data)) return error.InvalidDataField;
72 } else {
73 return error.NoRowsFound;
74 }
75}