mirror of
https://github.com/openclaw/openclaw.git
synced 2026-05-06 08:10:44 +00:00
fix(plugins): detect install root rebinding
This commit is contained in:
@@ -218,7 +218,7 @@ describe("installPackageDir", () => {
|
||||
installBaseDir,
|
||||
preservedDir: preservedInstallRoot,
|
||||
outsideTarget: outsideInstallRoot,
|
||||
rebindAtCall: 3,
|
||||
rebindAtCall: 4,
|
||||
run: async () => {
|
||||
await expect(
|
||||
installPackageDir({
|
||||
@@ -259,7 +259,7 @@ describe("installPackageDir", () => {
|
||||
installBaseDir,
|
||||
preservedDir: preservedInstallRoot,
|
||||
outsideTarget: outsideInstallRoot,
|
||||
rebindAtCall: 7,
|
||||
rebindAtCall: 8,
|
||||
run: async () =>
|
||||
await installPackageDir({
|
||||
sourceDir,
|
||||
|
||||
@@ -170,11 +170,17 @@ export async function installPackageDir(params: {
|
||||
}): Promise<{ ok: true } | { ok: false; error: string; code?: string }> {
|
||||
params.logger?.info?.(`Installing to ${params.targetDir}…`);
|
||||
const installBaseDir = path.dirname(params.targetDir);
|
||||
await fs.mkdir(installBaseDir, { recursive: true });
|
||||
await assertInstallBoundaryPaths({
|
||||
installBaseDir,
|
||||
candidatePaths: [params.targetDir],
|
||||
});
|
||||
let initialInstallBaseRealPath: string;
|
||||
try {
|
||||
await fs.mkdir(installBaseDir, { recursive: true });
|
||||
initialInstallBaseRealPath = await fs.realpath(installBaseDir);
|
||||
await assertInstallBoundaryPaths({
|
||||
installBaseDir,
|
||||
candidatePaths: [params.targetDir],
|
||||
});
|
||||
} catch (err) {
|
||||
return { ok: false, error: `${params.copyErrorPrefix}: ${String(err)}` };
|
||||
}
|
||||
let installBaseRealPath: string;
|
||||
let canonicalTargetDir: string;
|
||||
try {
|
||||
@@ -182,7 +188,13 @@ export async function installPackageDir(params: {
|
||||
installBaseDir,
|
||||
targetDir: params.targetDir,
|
||||
}));
|
||||
if (installBaseRealPath !== initialInstallBaseRealPath) {
|
||||
throw new Error(INSTALL_BASE_CHANGED_ERROR_MESSAGE);
|
||||
}
|
||||
} catch (err) {
|
||||
if (isInstallBaseChangedError(err)) {
|
||||
params.logger?.warn?.(INSTALL_BASE_CHANGED_ABORT_WARNING);
|
||||
}
|
||||
return { ok: false, error: `${params.copyErrorPrefix}: ${String(err)}` };
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user