fix(security): harden diagnostics storage boundary
This commit is contained in:
@@ -3,7 +3,7 @@ import { mkdir, mkdtemp, rm, writeFile } from "node:fs/promises";
|
||||
import { tmpdir } from "node:os";
|
||||
import { join } from "node:path";
|
||||
import { InvalidUtf8Error } from "../src/lib/fs";
|
||||
import { readPackageValue } from "../src/lib/packageMeta";
|
||||
import { isMissingPackageMetadataError, readPackageValue } from "../src/lib/packageMeta";
|
||||
|
||||
const directories: string[] = [];
|
||||
|
||||
@@ -19,6 +19,14 @@ async function packageDir(): Promise<string> {
|
||||
}
|
||||
|
||||
describe("metadata пакета", () => {
|
||||
test("fallback классифицирует только ENOENT", () => {
|
||||
expect(isMissingPackageMetadataError(Object.assign(new Error("missing"), { code: "ENOENT" }))).toBe(true);
|
||||
for (const code of ["EACCES", "EIO", "EISDIR"]) {
|
||||
expect(isMissingPackageMetadataError(Object.assign(new Error(code), { code }))).toBe(false);
|
||||
}
|
||||
expect(isMissingPackageMetadataError(new InvalidUtf8Error("metadata/value", new Error("decode")))).toBe(false);
|
||||
});
|
||||
|
||||
test("отсутствующее необязательное значение использует fallback", async () => {
|
||||
const directory = await packageDir();
|
||||
expect(await readPackageValue(directory, "missing", "unknown")).toBe("unknown");
|
||||
@@ -31,4 +39,10 @@ describe("metadata пакета", () => {
|
||||
InvalidUtf8Error
|
||||
);
|
||||
});
|
||||
|
||||
test("каталог вместо metadata-файла не маскируется fallback-значением", async () => {
|
||||
const directory = await packageDir();
|
||||
await mkdir(join(directory, "metadata", "package.version"));
|
||||
await expect(readPackageValue(directory, "package.version", "unknown")).rejects.toBeDefined();
|
||||
});
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user