Skip to content

Commit 1d38adb

Browse files
authored
fix(trace cli): confine attachment writes to output dir (#40542)
1 parent b80e42e commit 1d38adb

1 file changed

Lines changed: 6 additions & 2 deletions

File tree

packages/playwright-core/src/tools/trace/traceUtils.ts

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import path from 'path';
2020
import { TraceModel, buildActionTree } from '@isomorphic/trace/traceModel';
2121
import { TraceLoader } from '@isomorphic/trace/traceLoader';
2222
import { renderTitleForCall } from '@isomorphic/protocolFormatter';
23+
import { resolveWithinRoot } from '@utils/fileUtils';
2324
import { DirTraceLoaderBackend, extractTrace } from './traceParser';
2425

2526
import type { ActionTraceEventInContext } from '@isomorphic/trace/traceModel';
@@ -113,8 +114,11 @@ export async function saveOutputFile(fileName: string, content: string | Buffer,
113114
if (explicitOutput) {
114115
outFile = explicitOutput;
115116
} else {
116-
await fs.promises.mkdir(cliOutputDir, { recursive: true });
117-
outFile = path.join(cliOutputDir, fileName);
117+
const resolved = resolveWithinRoot(cliOutputDir, fileName);
118+
if (!resolved)
119+
throw new Error(`Attachment name '${fileName}' escapes output directory`);
120+
await fs.promises.mkdir(path.dirname(resolved), { recursive: true });
121+
outFile = resolved;
118122
}
119123
await fs.promises.writeFile(outFile, content);
120124
return outFile;

0 commit comments

Comments
 (0)