summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorwxiaoguang2022-06-18 22:06:32 +0800
committerGitHub2022-06-18 22:06:32 +0800
commit433443ffa9f41dbf548d1c63d3355221c6a63e9b (patch)
treedea1854ccbc6f883896f962b348b5b14d119e1b4
parent870d7f90e7b6eae9f7bf9624d76b7c0fb46a39ae (diff)
Dump should only copy regular files and symlink regular files (#20015)v1.18.0-dev
-rw-r--r--cmd/dump.go21
1 files changed, 18 insertions, 3 deletions
diff --git a/cmd/dump.go b/cmd/dump.go
index ea41c0c02..d807cb058 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
+ }
}
}
}