From 5af3c4e24467abeed1ad0cebe7d7bf3159a13970 Mon Sep 17 00:00:00 2001 From: HFO4 <912394456@qq.com> Date: Tue, 19 May 2020 11:25:01 +0800 Subject: [PATCH] Fix: directory renaming should not be limited by file extensions (#395) --- .github/workflows/build.yml | 2 ++ pkg/filesystem/manage.go | 2 +- pkg/filesystem/manage_test.go | 29 ++++++++++++++++++++++++++++- 3 files changed, 31 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 97f1854..adb6428 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -48,6 +48,8 @@ jobs: with: clean: false submodules: 'recursive' + - run: | + git fetch --prune --unshallow --tags - name: Get dependencies and build run: | diff --git a/pkg/filesystem/manage.go b/pkg/filesystem/manage.go index 21542f8..9a5a636 100644 --- a/pkg/filesystem/manage.go +++ b/pkg/filesystem/manage.go @@ -32,7 +32,7 @@ type Object struct { // Rename 重命名对象 func (fs *FileSystem) Rename(ctx context.Context, dir, file []uint, new string) (err error) { // 验证新名字 - if !fs.ValidateLegalName(ctx, new) || !fs.ValidateExtension(ctx, new) { + if !fs.ValidateLegalName(ctx, new) || (len(file) > 0 && !fs.ValidateExtension(ctx, new)) { return ErrIllegalObjectName } diff --git a/pkg/filesystem/manage_test.go b/pkg/filesystem/manage_test.go index 5ef221d..2d795ce 100644 --- a/pkg/filesystem/manage_test.go +++ b/pkg/filesystem/manage_test.go @@ -707,12 +707,39 @@ func TestFileSystem_Rename(t *testing.T) { asserts.Equal(ErrPathNotExist, err) } - // 新名字不合法 + // 新名字是目录,不合法 { err := fs.Rename(ctx, []uint{10}, []uint{}, "ne/w") asserts.Error(err) asserts.Equal(ErrIllegalObjectName, err) } + + // 新名字是文件,不合法 + { + err := fs.Rename(ctx, []uint{}, []uint{10}, "ne/w") + asserts.Error(err) + asserts.Equal(ErrIllegalObjectName, err) + } + + // 新名字是文件,扩展名不合法 + { + fs.User.Policy.OptionsSerialized.FileType = []string{"txt"} + err := fs.Rename(ctx, []uint{}, []uint{10}, "1.jpg") + asserts.Error(err) + asserts.Equal(ErrIllegalObjectName, err) + } + + // 新名字是目录,不应该检测扩展名 + { + fs.User.Policy.OptionsSerialized.FileType = []string{"txt"} + mock.ExpectQuery("SELECT(.+)folders(.+)"). + WithArgs(10, 1). + WillReturnRows(sqlmock.NewRows([]string{"id", "name"})) + err := fs.Rename(ctx, []uint{10}, []uint{}, "new") + asserts.NoError(mock.ExpectationsWereMet()) + asserts.Error(err) + asserts.Equal(ErrPathNotExist, err) + } } func TestFileSystem_SaveTo(t *testing.T) {