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
|
||||
return errNonFileHasBlocks
|
||||
|
||||
case f.Type != FileInfoTypeFile && f.Size != 0:
|
||||
// Only files should have a size
|
||||
case f.IsDirectory() && f.Size != 0 && f.Size != SyntheticDirectorySize:
|
||||
// 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
|
||||
|
||||
case !f.Deleted && !f.IsInvalid() && f.Type == FileInfoTypeFile && len(f.Blocks) == 0:
|
||||
|
||||
@@ -451,6 +451,61 @@ func TestCheckConsistency(t *testing.T) {
|
||||
},
|
||||
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 {
|
||||
|
||||
Reference in New Issue
Block a user