fix: bind manual production graph and snapshots
This commit is contained in:
@@ -601,6 +601,22 @@ test("prepare binds production entry bytes and serve rejects a regular replaceme
|
||||
await assert.rejects(lstat(malicious)); await assert.rejects(lstat(join(run.root,"backend.pid")));
|
||||
});
|
||||
|
||||
test("serve rejects replacement of an imported production dependency", { concurrency: false }, async () => {
|
||||
const repo=await fakeRepo(),malicious=join(repo,"dependency-executed"); await installFakeServer(repo);
|
||||
const server=join(repo,"backend/dist/server.js"), original=await readFile(server); await writeFile(join(repo,"backend/dist/dep.js"),"export const dependency = true;\n"); await writeFile(server,`import \"./dep.js\";\n${original}`);
|
||||
const run=await prepareManual({repositoryRoot:repo,skipBuild:true}); const before=await readFile(server); await writeFile(join(repo,"backend/dist/dep.js"),`import {writeFileSync} from \"node:fs\"; writeFileSync(${JSON.stringify(malicious)},\"bad\");\n`);
|
||||
assert.deepEqual(await readFile(server),before); await assert.rejects(serveManual({repositoryRoot:repo}),/distribution|identity|manifest/i); await assert.rejects(lstat(malicious)); await assert.rejects(lstat(join(run.root,"backend.pid")));
|
||||
});
|
||||
|
||||
test("serve refuses a replaced backend dist dependency after prepare", { concurrency: false }, async () => {
|
||||
const repo=await fakeRepo(); await installFakeServer(repo);
|
||||
const dependency=join(repo,"backend/dist/dependency.js"); await writeFile(dependency,"export const value = 1;\n");
|
||||
const run=await prepareManual({repositoryRoot:repo,skipBuild:true}),marker=join(repo,"dependency-replaced-executed");
|
||||
await writeFile(dependency,`import { writeFileSync } from "node:fs";writeFileSync(${JSON.stringify(marker)},"bad");export const value = 2;\n`);
|
||||
await assert.rejects(serveManual({repositoryRoot:repo}),/distribution|manifest|identity/i);
|
||||
await assert.rejects(lstat(marker)); await assert.rejects(lstat(join(run.root,"backend.pid")));
|
||||
});
|
||||
|
||||
test("opened production FD prevents deterministic check-spawn replacement execution", { concurrency: false }, async () => {
|
||||
const repo=await fakeRepo(),safe=join(repo,"safe-executed"),malicious=join(repo,"malicious-executed"); await installFakeServer(repo,{marker:safe});
|
||||
const run=await prepareManual({repositoryRoot:repo,skipBuild:true}),script=join(repo,"backend/dist/server.js"),replacement=join(repo,"replacement-server.js");
|
||||
|
||||
Reference in New Issue
Block a user