fix(fs): return correct Stat Name for .by/<col>/ and .filter/<col>/#50
Merged
Conversation
Stat on .log/.by/user_id/ (and any other .{by,filter,order}/<col>/
path) returned Entry.Name = the capability dir (e.g. "by") instead of
the leaf segment. macOS NFS validates that GETATTR/LOOKUP response
names match the request path's leaf and rejects mismatches as
SYSTEM_ERR, which the kernel surfaces as "fts_read: RPC struct is bad"
(EBADRPC). On Linux FUSE the name field isn't validated against the
request, so the bug was invisible there.
The PathTable case in statWithParsed already had this basename
correction, with a comment explaining the NFS requirement. The
PathCapability case below it didn't. Mirror the correction so
PathCapability also returns the leaf name when CapabilityArg is set.
Tests cover the previously-broken paths (.by/<col>/, .filter/<col>/),
the regression case (.by/ root with empty CapabilityArg, where the
capability dir name IS the leaf and must still be returned), and the
specific empty-readdir scenario flagged on macOS NFS (an all-NULL
column, since GetDistinctValues filters NULL, the listing is empty
which must succeed cleanly rather than error).
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.
Stat on .log/.by/user_id/ (and any other .{by,filter,order}// path) returned Entry.Name = the capability dir (e.g. "by") instead of the leaf segment. macOS NFS validates that GETATTR/LOOKUP response names match the request path's leaf and rejects mismatches as SYSTEM_ERR, which the kernel surfaces as "fts_read: RPC struct is bad" (EBADRPC). On Linux FUSE the name field isn't validated against the request, so the bug was invisible there.
The PathTable case in statWithParsed already had this basename correction, with a comment explaining the NFS requirement. The PathCapability case below it didn't. Mirror the correction so PathCapability also returns the leaf name when CapabilityArg is set.
Tests cover the previously-broken paths (.by//, .filter//), the regression case (.by/ root with empty CapabilityArg, where the capability dir name IS the leaf and must still be returned), and the specific empty-readdir scenario flagged on macOS NFS (an all-NULL column, since GetDistinctValues filters NULL, the listing is empty which must succeed cleanly rather than error).