Skip to content

Commit a7149a9

Browse files
committed
Harden benchmark safety helpers
Treat malformed resolver return values as public before reading or iterating the result. Also guard the explicit-load helper against non-object load values before using property checks. #795 (comment) #795 (comment) Assisted-by: Codex:gpt-5.5
1 parent 40828e9 commit a7149a9

3 files changed

Lines changed: 11 additions & 1 deletion

File tree

packages/cli/src/bench/action.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -505,6 +505,7 @@ function unsafeOverrideScenario(
505505

506506
function hasExplicitLoad(load: LoadConfig | undefined): boolean {
507507
return load != null &&
508+
typeof load === "object" &&
508509
(("rate" in load && load.rate != null) ||
509510
("concurrency" in load && load.concurrency != null));
510511
}

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

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,14 @@ test("classifyResolvedTarget - treats resolution failure as public", async () =>
103103
assert.strictEqual(tier, "public");
104104
});
105105

106+
test("classifyResolvedTarget - treats non-array resolver output as public", async () => {
107+
const tier = await classifyResolvedTarget(
108+
new URL("https://bench.example"),
109+
() => Promise.resolve(null as unknown as readonly string[]),
110+
);
111+
assert.strictEqual(tier, "public");
112+
});
113+
106114
test("classifyResolvedTarget - treats malformed resolver output as public", async () => {
107115
const tier = await classifyResolvedTarget(
108116
new URL("https://bench.example"),

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,8 @@ export async function classifyResolvedTarget(
5858
if (direct !== "public" || isIpLiteral(host)) return direct;
5959
let addresses: readonly string[];
6060
try {
61-
addresses = await resolveAddresses(host);
61+
const resolved = await resolveAddresses(host);
62+
addresses = Array.isArray(resolved) ? resolved : [];
6263
} catch {
6364
return "public";
6465
}

0 commit comments

Comments
 (0)