PranitInitial commit439f83c3 months agoHistory
30 lines · 1.1 KB · Zig
RawDownload
const std = @import("std"); pub fn searchWorkerInputFitsLimit(    input_overhead_bytes: usize,    query: []const u8,    allowed_domains: ?[]const []const u8,    blocked_domains: ?[]const []const u8,    max_input_bytes: usize,) bool {    var input_bytes: usize = 0;    addBytes(&input_bytes, input_overhead_bytes) catch return false;    addBytes(&input_bytes, query.len) catch return false;    addOptionalStrings(&input_bytes, allowed_domains) catch return false;    addOptionalStrings(&input_bytes, blocked_domains) catch return false;    return input_bytes <= max_input_bytes;} fn addOptionalStrings(total: *usize, maybe_strings: ?[]const []const u8) !void {    const strings = maybe_strings orelse return;    for (strings) |value| try addBytes(total, value.len);} fn addBytes(total: *usize, count: usize) !void {    total.* = try std.math.add(usize, total.*, count);} test "search worker input cap uses conservative serialized bytes" {    try std.testing.expect(searchWorkerInputFitsLimit("system".len, "query", &.{"allowed"}, null, 18));    try std.testing.expect(!searchWorkerInputFitsLimit("system".len, "query", &.{"allowed"}, null, 17));}