Skip to content
Open
Show file tree
Hide file tree
Changes from 4 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions sdk/typescript/src/targets.ts
Original file line number Diff line number Diff line change
Expand Up @@ -413,6 +413,7 @@ async function gitOutput(
encoding: "utf8",
signal,
env: command.environment,
maxBuffer: Infinity,
},
);
return stdout.trim();
Expand Down
68 changes: 68 additions & 0 deletions sdk/typescript/tests-ts/targets-large-output.test.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
import { execFileSync } from "node:child_process";
import { mkdtemp, mkdir, realpath, rm, writeFile } from "node:fs/promises";
import { tmpdir } from "node:os";
import { join } from "node:path";
import { afterEach, expect, test } from "bun:test";
import {
DiffTarget,
normalizeTarget,
validateCommittedDiffCheckout,
} from "../src/targets.js";

const temporaryDirectories: string[] = [];

afterEach(async () => {
await Promise.all(
temporaryDirectories
.splice(0)
.map((path) => rm(path, { recursive: true, force: true })),
);
});

function git(repo: string, ...args: string[]): string {
return execFileSync("git", args, {
cwd: repo,
encoding: "utf8",
maxBuffer: Infinity,
}).trim();
}

test("validates committed diffs with tracked-file output larger than 1 MB", async () => {
const root = await realpath(
await mkdtemp(join(tmpdir(), "codex-security-large-targets-")),
);
temporaryDirectories.push(root);
const repo = join(root, "repo");
await mkdir(repo);

git(repo, "init", "-b", "main");
git(repo, "config", "user.email", "test@example.com");
git(repo, "config", "user.name", "Test");

const trackedDirectory = join(repo, "tracked");
await mkdir(trackedDirectory);
// Exceed the byte limit without creating paths that are too long on Windows.
const utf8Stem = "界".repeat(120);
Comment thread
mldangelo-oai marked this conversation as resolved.
Outdated
await Promise.all(

Check failure on line 46 in sdk/typescript/tests-ts/targets-large-output.test.ts

View workflow job for this annotation

GitHub Actions / ubuntu-latest / node-24

error: .ts'

.ts' at async <anonymous> (/home/runner/work/codex-security/codex-security/sdk/typescript/tests-ts/targets-large-output.test.ts:46:17)

Check failure on line 46 in sdk/typescript/tests-ts/targets-large-output.test.ts

View workflow job for this annotation

GitHub Actions / ubuntu-latest / node-24.0.0

error: .ts'

.ts' at async <anonymous> (/home/runner/work/codex-security/codex-security/sdk/typescript/tests-ts/targets-large-output.test.ts:46:17)

Check failure on line 46 in sdk/typescript/tests-ts/targets-large-output.test.ts

View workflow job for this annotation

GitHub Actions / ubuntu-latest / node-26.0.0

error: .ts'

.ts' at async <anonymous> (/home/runner/work/codex-security/codex-security/sdk/typescript/tests-ts/targets-large-output.test.ts:46:17)

Check failure on line 46 in sdk/typescript/tests-ts/targets-large-output.test.ts

View workflow job for this annotation

GitHub Actions / ubuntu-latest / node-22

error: .ts'

.ts' at async <anonymous> (/home/runner/work/codex-security/codex-security/sdk/typescript/tests-ts/targets-large-output.test.ts:46:17)

Check failure on line 46 in sdk/typescript/tests-ts/targets-large-output.test.ts

View workflow job for this annotation

GitHub Actions / ubuntu-latest / node-26

error: .ts'

.ts' at async <anonymous> (/home/runner/work/codex-security/codex-security/sdk/typescript/tests-ts/targets-large-output.test.ts:46:17)
Array.from({ length: 3_000 }, (_, index) =>
writeFile(
join(
trackedDirectory,
`${index.toString().padStart(4, "0")}-${utf8Stem}.ts`,
),
"",
),
),
);

git(repo, "add", ".");
git(repo, "commit", "--quiet", "-m", "large tracked tree");

const tracked = git(repo, "ls-files", "-t", "-z");
expect(Buffer.byteLength(tracked, "utf8")).toBeGreaterThan(1024 * 1024);

const target = await normalizeTarget(repo, DiffTarget.refs({ base: "HEAD" }));
await expect(
validateCommittedDiffCheckout(repo, target),
).resolves.toBeUndefined();
});
Loading