fix(core): resolve symlinks for non-existent paths during validation#21486
fix(core): resolve symlinks for non-existent paths during validation#21486
Conversation
…constrained heights Fixes #20716
The path validation logic in Config.isPathAllowed failed when attempting to write a new file to a directory that is a symbolic link. This happened because fs.realpathSync fails on non-existent paths, falling back to an unresolved path which then mismatches with the resolved project temporary directory during the isSubpath check. This commit updates resolveToRealPath to robustly resolve parent directories even if the leaf file does not exist, and updates isPathAllowed to use this improved helper.
|
Hi @Adib234, thank you so much for your contribution to Gemini CLI! We really appreciate the time and effort you've put into this. We're making some updates to our contribution process to improve how we track and review changes. Please take a moment to review our recent discussion post: Improving Our Contribution Process & Introducing New Guidelines. Key Update: Starting January 26, 2026, the Gemini CLI project will require all pull requests to be associated with an existing issue. Any pull requests not linked to an issue by that date will be automatically closed. Thank you for your understanding and for being a part of our community! |
Summary of ChangesHello, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed! This pull request addresses a critical path validation issue that occurred when attempting to write new files to directories that were symbolic links. Previously, the system would incorrectly report a 'Path not in workspace' error because Highlights
Changelog
Activity
Using Gemini Code AssistThe full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips. Invoking Gemini You can request assistance from Gemini at any point by creating a comment using either
Customization To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a Limitations & Feedback Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for Github and other Google products, sign up here. You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension. Footnotes
|
There was a problem hiding this comment.
Code Review
This pull request correctly fixes a bug in path validation by recursively resolving symbolic links for non-existent paths, which prevents 'Path not in workspace' errors. The implementation in robustRealpath is sound and the associated tests are well-written.
However, this pull request also includes an unrelated UI feature for unconstrainedHeight in dialogs. This change, while functional, is not mentioned in the pull request description and mixes concerns. The repository's development conventions state that pull requests should be small and focused. Bundling unrelated changes makes the pull request harder to review and track. In the future, please submit separate pull requests for distinct features or fixes.
Summary
Fixes a path validation bug where attempting to write a new file to a directory that is a symbolic link would fail with a "Path not in workspace" error.
fs.realpathSyncfails on non-existent paths, which caused it to fall back to an unresolved path that mismatched with the fully resolved project temporary directory during theisSubpathcheck.Details
Updates
resolveToRealPathinpackages/core/src/utils/paths.tsto robustly resolve parent directories recursively iffs.realpathSyncthrows anENOENTerror. UpdatesConfig.isPathAllowedto use this improved helper. Added unit tests to verify that symlinked parent paths are correctly resolved for non-existent children, and updatedstorage.test.tsto reflect the fixedresolveToRealPathbehavior.Related Issues
Fixes #1
How to Validate
npm test -w @google/gemini-cli-core.geminidirectory or temporary project path.Pre-Merge Checklist