fix: reject apply targets that are symlinks#118
Conversation
Phase-2 rename replaced symlink paths with regular files. Detect symlinks via lstat before read/write and report a conflict instead.
🦋 Changeset detectedLatest commit: 68efefd The changes in this PR will be included in the next version bump. This PR includes changesets to release 1 package
Not sure what this means? Click here to learn what changesets are. Click here if you're a maintainer who wants to add another changeset to this PR |
|
Warning Rate limit exceeded
You’ve run out of usage credits. Purchase more in the billing tab. ⌛ How to resolve this issue?After the wait time has elapsed, a review can be triggered using the We recommend that you space out your commits to avoid hitting the rate limit. 🚦 How do rate limits work?CodeRabbit enforces hourly rate limits for each developer per organization. Our paid plans have higher rate limits than the trial, open-source and free plans. In all cases, we re-allow further reviews after a brief timeout. Please see our FAQ for further information. ℹ️ Review info⚙️ Run configurationConfiguration used: defaults Review profile: CHILL Plan: Pro Run ID: 📒 Files selected for processing (3)
✨ Finishing Touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
Summary
applyphase-2 used temp-file +renameover the requested path. When that path was a symlink, POSIX rename replaced the link with a regular file — silent data-loss for repos that track symlinked sources.Fix:
lstateach target before read/write; emit conflictpath is a symlinkand skip phase 2 for that row.Test plan
link.ts→real.ts: apply reports conflict, link stays symlink, target unchangedbun test src/application/apply-engine.test.tsbun run typecheck