From 35fd166bcee1487649df05ceaaee21373d4c0f5d Mon Sep 17 00:00:00 2001 From: Mahima Shanware Date: Tue, 7 Apr 2026 04:25:48 +0000 Subject: [PATCH] fix(core): ensure global gemini dir resolution is crash-safe during plan validation --- packages/core/src/config/config.ts | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/packages/core/src/config/config.ts b/packages/core/src/config/config.ts index f6526de046..0466fdfea7 100644 --- a/packages/core/src/config/config.ts +++ b/packages/core/src/config/config.ts @@ -2276,11 +2276,22 @@ export class Config implements McpContext, AgentLoopContext { } catch (e: unknown) { mkdirError = e; } + let realPlansDir: string; + try { + realPlansDir = resolveToRealPath(plansDir); + } catch { + // Fallback to path.resolve if the directory doesn't exist yet (e.g. mkdirSync failed) + // so that the security check can still be performed on the absolute path. + realPlansDir = path.resolve(plansDir); + } - const realPlansDir = resolveToRealPath(plansDir); const realProjectRoot = this.storage.getRealProjectRoot(); - const realGlobalGeminiDir = resolveToRealPath(Storage.getGlobalGeminiDir()); - + let realGlobalGeminiDir: string; + try { + realGlobalGeminiDir = resolveToRealPath(Storage.getGlobalGeminiDir()); + } catch { + realGlobalGeminiDir = path.resolve(Storage.getGlobalGeminiDir()); + } if ( !isSubpath(realProjectRoot, realPlansDir) && !isSubpath(realGlobalGeminiDir, realPlansDir)