flipped-aurora/gin-vue-admin · error

服务端目录无效: %w

Error message

服务端目录无效: %w

What it means

Thrown by newAutoCodeTaskLayout when pathWithin(root, server) rejects the configured server subdirectory — meaning the server path escapes or is outside the auto-code root, an unsafe sandbox violation for staging generated files.

Source

Thrown at server/service/system/auto_code_task.go:58

	Kind          string
	Existed       bool
	Mode          fs.FileMode
	BeforeHash    string
	AfterHash     string
	BeforeContent []byte
	StagedPath    string
}

type autoCodeFilePublisher func(file *autoCodeTaskFile) (published bool, err error)

func newAutoCodeTaskLayout(root, server, web string) (autoCodeTaskLayout, error) {
	root, err := filepath.Abs(root)
	if err != nil {
		return autoCodeTaskLayout{}, fmt.Errorf("解析自动代码根目录失败: %w", err)
	}
	serverRoot, err := pathWithin(root, server)
	if err != nil {
		return autoCodeTaskLayout{}, fmt.Errorf("服务端目录无效: %w", err)
	}
	webRoot, err := pathWithin(root, web)
	if err != nil {
		return autoCodeTaskLayout{}, fmt.Errorf("前端目录无效: %w", err)
	}
	return autoCodeTaskLayout{
		root:       filepath.Clean(root),
		serverRoot: serverRoot,
		webRoot:    webRoot,
	}, nil
}

func prepareAutoCodeFileTask(layout autoCodeTaskLayout, files map[string][]byte) (_ *autoCodeFileTask, err error) {
	stagingDir, err := os.MkdirTemp(layout.root, autoCodeStagingPrefix)
	if err != nil {
		return nil, fmt.Errorf("创建自动代码 staging 目录失败: %w", err)
	}
	task := &autoCodeFileTask{

View on GitHub (pinned to 3136500ef3)

Solutions

  1. Set the server path to a plain relative subdirectory inside the auto-code root (e.g. 'server').
  2. Remove '..' segments and symlink hops; verify with filepath.EvalSymlinks.
  3. Check the config file for the autoCode server setting and correct it.

Example fix

// before (config)
autoCode:
  server: ../outside-server
// after
autoCode:
  server: server
Defensive patterns

Strategy: validation

Validate before calling

srvAbs, _ := filepath.Abs(server)
rootAbs, _ := filepath.Abs(root)
if !strings.HasPrefix(srvAbs+string(os.PathSeparator), rootAbs+string(os.PathSeparator)) {
    return fmt.Errorf("server path %s escapes root %s", srvAbs, rootAbs)
}

Try / catch

layout, err := newAutoCodeTaskLayout(root, server, web)
if err != nil {
    return fmt.Errorf("invalid autoCode config: %w", err)
}

Prevention

When it happens

Trigger: Create (or the layout test) is invoked with a server-relative path that resolves outside the resolved root: absolute paths, '..' segments, or symlinked directories that escape the root.

Common situations: Config's server path edited to an absolute path like /etc or ../other; symlinks in the project tree causing filepath eval to escape root; OS path separator mistakes on Windows-style config values.

Related errors


AI-assisted analysis of flipped-aurora/gin-vue-admin@3136500ef3 (2026-08-31). Data as JSON: /api/errors/20b23e5dc8b24ca1. Report an issue: GitHub.