fix(protocol): loosen restriction on size of directory entries (#10743)
The synthetic directory size must be permitted. Ref #10737. --------- Signed-off-by: Jakob Borg <jakob@kastelo.net>
This commit is contained in:
@@ -640,8 +640,12 @@ func checkFileInfoConsistency(f FileInfo) error {
|
|||||||
// Only files should have blocks
|
// Only files should have blocks
|
||||||
return errNonFileHasBlocks
|
return errNonFileHasBlocks
|
||||||
|
|
||||||
case f.Type != FileInfoTypeFile && f.Size != 0:
|
case f.IsDirectory() && f.Size != 0 && f.Size != SyntheticDirectorySize:
|
||||||
// Only files should have a size
|
// Directories should be size zero or the synthetic directory size
|
||||||
|
return errNonFileHasSize
|
||||||
|
|
||||||
|
case f.IsSymlink() && f.Size != 0:
|
||||||
|
// Symlinks should be size zero
|
||||||
return errNonFileHasSize
|
return errNonFileHasSize
|
||||||
|
|
||||||
case !f.Deleted && !f.IsInvalid() && f.Type == FileInfoTypeFile && len(f.Blocks) == 0:
|
case !f.Deleted && !f.IsInvalid() && f.Type == FileInfoTypeFile && len(f.Blocks) == 0:
|
||||||
|
|||||||
@@ -451,6 +451,61 @@ func TestCheckConsistency(t *testing.T) {
|
|||||||
},
|
},
|
||||||
ok: false,
|
ok: false,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
// directory with zero size
|
||||||
|
fi: FileInfo{
|
||||||
|
Name: "foo",
|
||||||
|
Type: FileInfoTypeDirectory,
|
||||||
|
},
|
||||||
|
ok: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
// directory with synthetic size
|
||||||
|
fi: FileInfo{
|
||||||
|
Name: "foo",
|
||||||
|
Type: FileInfoTypeDirectory,
|
||||||
|
Size: SyntheticDirectorySize,
|
||||||
|
},
|
||||||
|
ok: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
// directory with arbitrary size
|
||||||
|
fi: FileInfo{
|
||||||
|
Name: "foo",
|
||||||
|
Type: FileInfoTypeDirectory,
|
||||||
|
Size: 42,
|
||||||
|
},
|
||||||
|
ok: false,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
// symlink with zero size
|
||||||
|
fi: FileInfo{
|
||||||
|
Name: "foo",
|
||||||
|
Type: FileInfoTypeSymlink,
|
||||||
|
SymlinkTarget: []byte("bar"),
|
||||||
|
},
|
||||||
|
ok: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
// symlink with synthetic directory size (not permitted)
|
||||||
|
fi: FileInfo{
|
||||||
|
Name: "foo",
|
||||||
|
Type: FileInfoTypeSymlink,
|
||||||
|
SymlinkTarget: []byte("bar"),
|
||||||
|
Size: SyntheticDirectorySize,
|
||||||
|
},
|
||||||
|
ok: false,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
// symlink with arbitrary size
|
||||||
|
fi: FileInfo{
|
||||||
|
Name: "foo",
|
||||||
|
Type: FileInfoTypeSymlink,
|
||||||
|
SymlinkTarget: []byte("bar"),
|
||||||
|
Size: 42,
|
||||||
|
},
|
||||||
|
ok: false,
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, tc := range cases {
|
for _, tc := range cases {
|
||||||
|
|||||||
Reference in New Issue
Block a user