fix(task-archive): 遇到符号链接跳过而非整包失败
归档格式端到端只支持普通文件与目录(解包端对其它类型直接报错),原打包器遇到 任何 symlink 即整包失败(task archive refuses symlink),导致工作目录里一条软链 就卡死整个任务归档。改为跳过该符号链接并记日志:lstat 不跟随、不越出目录树、 不写 symlink 条目;链接指向树内时目标文件仍会被单独遍历归档。安全防护不变。 新增 TestTaskArchivePackageSkipsSymlink 覆盖。
This commit is contained in:
1 parent
33c26dc72a
commit
37950f4a6f
2 files changed
+39
-1
No files matched your search
@@ -9,6 +9,7 @@ import (
|
||||
"fmt"
|
||||
"io"
|
||||
"io/fs"
|
||||
"log"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"strconv"
|
||||
@@ -577,7 +578,11 @@ func writeTaskArchivePackage(path, payloadDir string, snapshot *pgdb.TaskArchive
|
||||
return err
|
||||
}
|
||||
if info.Mode()&os.ModeSymlink != 0 {
|
||||
return fmt.Errorf("task archive refuses symlink: %s", current)
|
||||
// 归档格式端到端只支持普通文件与目录(解包端对其它类型直接报错),
|
||||
// 无法还原符号链接。跳过而非整包失败:不读取链接目标(lstat,不越出目录树),
|
||||
// 也不写入 symlink 条目;链接指向树内时目标文件本身仍会被单独遍历归档。
|
||||
log.Printf("[task-archive] 跳过符号链接(归档不支持,不影响其它文件):%s", current)
|
||||
return nil
|
||||
}
|
||||
header, err := tar.FileInfoHeader(info, "")
|
||||
if err != nil {
|
||||
|
||||
Reference in new issue
Block a user