fix(core): resolve symlinks for non-existent paths during validation#21487
fix(core): resolve symlinks for non-existent paths during validation#21487
Conversation
|
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 previously prevented the creation of new files within directories that were symbolic links. The core of the fix involves significantly improving the 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 effectively addresses a bug with path validation for non-existent files in symlinked directories by introducing a robust, recursive resolveToRealPath function. The changes are well-implemented and include corresponding test updates. However, the fix is not fully propagated throughout the codebase. A similar path validation issue remains in WorkspaceContext, which is called by the modified code and could lead to incorrect behavior in scenarios involving workspace directories, as highlighted by our internal rules on path validation and symbolic link resolution. I've added a comment with more details.
|
Size Change: -249 B (0%) Total Size: 26 MB ℹ️ View Unchanged
|
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.
54afae1 to
c478436
Compare
|
Tested locally with symlinks but want to verify it works with |
|
/patch preview |
|
✅ Patch workflow(s) dispatched successfully! 📋 Details:
🔗 Track Progress: |
|
🚀 Patch PR Created! 📋 Patch Details:
📝 Next Steps:
🔗 Track Progress: |
|
🚀 Patch Release Started! 📋 Release Details:
⏳ Status: The patch release is now running. You'll receive another update when it completes. 🔗 Track Progress: |
|
❌ Patch Release Failed! 📋 Details:
🔍 Next Steps:
🔗 Troubleshooting: |
|
/patch preview |
|
✅ Patch workflow(s) dispatched successfully! 📋 Details:
🔗 Track Progress: |
|
❌ Patch creation failed! There was an error creating the patch release. 🔍 Troubleshooting:
🔗 Links: |
|
❌ Patch Release Failed! 📋 Details:
🔍 Next Steps:
🔗 Troubleshooting: |
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 #21489
How to Validate
npm test -w @google/gemini-cli-core.geminidirectory or temporary project path.Pre-Merge Checklist