mirror of
https://github.com/grafana/grafana.git
synced 2025-09-26 21:23:40 +08:00
skip symlinks to directories when generating plugin manifest (#30721)
This commit is contained in:
@ -13,7 +13,7 @@ async function* walk(dir: string, baseDir: string): AsyncGenerator<string, any,
|
|||||||
} else if (d.isFile()) {
|
} else if (d.isFile()) {
|
||||||
yield path.posix.relative(baseDir, entry);
|
yield path.posix.relative(baseDir, entry);
|
||||||
} else if (d.isSymbolicLink()) {
|
} else if (d.isSymbolicLink()) {
|
||||||
const realPath = fs.realpathSync(entry);
|
const realPath = await (fs.promises as any).realpath(entry);
|
||||||
if (!realPath.startsWith(baseDir)) {
|
if (!realPath.startsWith(baseDir)) {
|
||||||
throw new Error(
|
throw new Error(
|
||||||
`symbolic link ${path.posix.relative(
|
`symbolic link ${path.posix.relative(
|
||||||
@ -22,9 +22,13 @@ async function* walk(dir: string, baseDir: string): AsyncGenerator<string, any,
|
|||||||
)} targets a file outside of the base directory: ${baseDir}`
|
)} targets a file outside of the base directory: ${baseDir}`
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
// if resolved symlink target is a file include it in the manifest
|
||||||
|
const stats = await (fs.promises as any).stat(realPath);
|
||||||
|
if (stats.isFile()) {
|
||||||
yield path.posix.relative(baseDir, entry);
|
yield path.posix.relative(baseDir, entry);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function buildManifest(dir: string): Promise<ManifestInfo> {
|
export async function buildManifest(dir: string): Promise<ManifestInfo> {
|
||||||
|
Reference in New Issue
Block a user