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));}
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));
}