Repository navigation
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Revalidates the destination directory with assertManagedPath in applyOneConfigEntry before running lstat, readFile, or fse.copy.
Previously, assertManagedPath was called only during the initial pre-pass over all pending configs and immediately before the atomic write in the write loop. If a folder under ModConfig was replaced with a symbolic link after the pre-pass, lstat on the destination resolved through the directory link to an outside target file, which was read and copied into the recovery backup folder before the subsequent write was refused. Re-checking the destination directory immediately before lstat and read operations halts processing on the swapped path, refusing it as write-failed without reading outside files or copying them into backups.
Type
Checklist
dev, notmain.npm run typecheckpasses.npm run lint:cipasses.npm run format:checkpasses.npm run test:coveragepasses, coverage at or above the floor invitest.config.ts.npm run build:unpackpasses.Testing
Executed the full test suite and build verification:
npm run typecheck: 0 errors.npm run lint:ci: 0 errors.npm run format:check: all files formatted.npm run test:coverage: 304 test files passed (1919 tests passed, 2 skipped). Coverage floors exceeded across all metrics:npm run build:unpack: unpacked Linux binary built successfully indist/linux-unpacked.tests/ipc/modConfigs.test.tscovering:Related issues
Fixes #626