fix: Prevent creating directories with no parent

This commit is contained in:
Felicitas Pojtinger
2022-01-12 23:41:12 +01:00
parent 36331168d4
commit 8decf22177
2 changed files with 24 additions and 10 deletions

View File

@@ -283,6 +283,21 @@ func (f *STFS) Mkdir(name string, perm os.FileMode) error {
f.ioLock.Lock()
defer f.ioLock.Unlock()
if _, err := inventory.Stat(
f.metadata,
filepath.Dir(name),
false,
f.onHeader,
); err != nil {
if err == sql.ErrNoRows {
return os.ErrNotExist
}
return err
}
if hdr, err := inventory.Stat(
f.metadata,

View File

@@ -806,13 +806,13 @@ var mkdirTests = []struct {
wantErr bool
}{
{
"Can create directory /test.txt",
mkdirArgs{"/test.txt", os.ModePerm},
"Can create directory /test",
mkdirArgs{"/test", os.ModePerm},
false,
},
{
"Can create directory /test.txt with different permissions",
mkdirArgs{"/test.txt", 0666},
"Can create directory /test with different permissions",
mkdirArgs{"/test", 0666},
false,
},
{
@@ -830,12 +830,11 @@ var mkdirTests = []struct {
mkdirArgs{"", os.ModePerm},
true,
},
// FIXME: STFS can create directory in non-existent directory, which should not be possible
// {
// "Can not create /nonexistent/test.txt",
// mkdirArgs{"/nonexistent/test.txt", os.ModePerm},
// true,
// },
{
"Can not create /nonexistent/test",
mkdirArgs{"/nonexistent/test", os.ModePerm},
true,
},
}
func TestSTFS_Mkdir(t *testing.T) {