diff options
author | wxiaoguang <wxiaoguang@gmail.com> | 2022-06-18 22:06:32 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-06-18 22:06:32 +0800 |
commit | 433443ffa9f41dbf548d1c63d3355221c6a63e9b (patch) | |
tree | dea1854ccbc6f883896f962b348b5b14d119e1b4 /cmd/dump.go | |
parent | 870d7f90e7b6eae9f7bf9624d76b7c0fb46a39ae (diff) | |
download | gitea-433443ffa9f41dbf548d1c63d3355221c6a63e9b.tar.gz gitea-433443ffa9f41dbf548d1c63d3355221c6a63e9b.zip |
Dump should only copy regular files and symlink regular files (#20015)v1.18.0-dev
Diffstat (limited to 'cmd/dump.go')
-rw-r--r-- | cmd/dump.go | 21 |
1 files changed, 18 insertions, 3 deletions
diff --git a/cmd/dump.go b/cmd/dump.go index ea41c0c029..d807cb0587 100644 --- a/cmd/dump.go +++ b/cmd/dump.go @@ -22,7 +22,7 @@ import ( "code.gitea.io/gitea/modules/util" "gitea.com/go-chi/session" - archiver "github.com/mholt/archiver/v3" + "github.com/mholt/archiver/v3" "github.com/urfave/cli" ) @@ -439,8 +439,23 @@ func addRecursiveExclude(w archiver.Writer, insidePath, absPath string, excludeA } } } else { - if err = addFile(w, currentInsidePath, currentAbsPath, verbose); err != nil { - return err + // only copy regular files and symlink regular files, skip non-regular files like socket/pipe/... + shouldAdd := file.Mode().IsRegular() + if !shouldAdd && file.Mode()&os.ModeSymlink == os.ModeSymlink { + target, err := filepath.EvalSymlinks(currentAbsPath) + if err != nil { + return err + } + targetStat, err := os.Stat(target) + if err != nil { + return err + } + shouldAdd = targetStat.Mode().IsRegular() + } + if shouldAdd { + if err = addFile(w, currentInsidePath, currentAbsPath, verbose); err != nil { + return err + } } } } |