Skip to content

Commit bfd3d6c

Browse files
committed
Treat bad resolver output as public
Malformed resolver output should not escape the benchmark safety classifier. Fall back to the public tier so the gate stays conservative when a custom resolver returns an address string that cannot be parsed as a URL host. #795 (comment) Assisted-by: Codex:gpt-5.5
1 parent ea8fc6e commit bfd3d6c

2 files changed

Lines changed: 14 additions & 1 deletion

File tree

packages/cli/src/bench/safety/tiers.test.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -102,3 +102,11 @@ test("classifyResolvedTarget - treats resolution failure as public", async () =>
102102
);
103103
assert.strictEqual(tier, "public");
104104
});
105+
106+
test("classifyResolvedTarget - treats malformed resolver output as public", async () => {
107+
const tier = await classifyResolvedTarget(
108+
new URL("https://bench.example"),
109+
() => Promise.resolve(["2001:db8:::1"]),
110+
);
111+
assert.strictEqual(tier, "public");
112+
});

packages/cli/src/bench/safety/tiers.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,12 @@ export async function classifyResolvedTarget(
6565
if (addresses.length < 1) return "public";
6666
let aggregate: TargetTier = "loopback";
6767
for (const address of addresses) {
68-
const tier = classifyTarget(new URL(`http://${hostForAddress(address)}/`));
68+
let tier: TargetTier;
69+
try {
70+
tier = classifyTarget(new URL(`http://${hostForAddress(address)}/`));
71+
} catch {
72+
return "public";
73+
}
6974
if (tier === "public") return "public";
7075
if (tier === "private") aggregate = "private";
7176
}

0 commit comments

Comments
 (0)