fix(chmod): report Permission denied instead of No such file or directory #9860
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
fs::metadata()instead ofPath::exists()to distinguish between "file doesn't exist" and "permission denied" errorsRoot Cause
When a file exists but is inaccessible due to permission restrictions (e.g.,
chmod 755 locked/filewherelockeddirectory has no permissions),Path::exists()returnsfalsefor both non-existent files and inaccessible files. This caused chmod to incorrectly report "No such file or directory" instead of "Permission denied".Changes
Chmoder::chmod()to usefs::metadata()and check the error kindtest_chmod_permission_denied_not_no_such_fileto verify correct behaviorTest plan
Fixes #9789