修复系统服务名称路径校验

This commit is contained in:
xuans 2026-08-31 10:42:29 +08:00
parent 0563a060d9
commit 09e56cae48
3 changed files with 13 additions and 4 deletions

View File

@ -194,7 +194,7 @@ func (e *commandFailure) Error() string {
func (e *commandFailure) Unwrap() error { return e.err }
func validateName(name string) error {
if name == "" || name == "." || name == ".." {
if strings.TrimSpace(name) == "" || name == "." || name == ".." || strings.ContainsAny(name, `/\\`) {
return ErrInvalidName
}
return nil

View File

@ -45,3 +45,11 @@ func TestOptionsNormalizedDefaultsDisplayText(t *testing.T) {
t.Fatal("规范化后程序路径不能为空")
}
}
func TestValidateNameRejectsPathLikeValues(t *testing.T) {
for _, name := range []string{"", " ", ".", "..", "../Scert", "a/b", `a\b`} {
if err := validateName(name); err == nil {
t.Errorf("服务名称 %q 未被拒绝", name)
}
}
}

View File

@ -6,6 +6,7 @@ import (
"context"
"os/exec"
"strconv"
"strings"
)
func Install(ctx context.Context, options Options) error {
@ -24,8 +25,8 @@ func Install(ctx context.Context, options Options) error {
}
func Uninstall(ctx context.Context, name string) error {
if name == "" {
return commandError("卸载", ErrInvalidName)
if err := validateName(name); err != nil {
return err
}
if err := runSC(ctx, "stop", name); err != nil {
// 服务未运行时允许继续删除。
@ -83,7 +84,7 @@ func (e *commandFailure) Error() string {
func (e *commandFailure) Unwrap() error { return e.err }
func validateName(name string) error {
if name == "" || name == "." || name == ".." {
if strings.TrimSpace(name) == "" || name == "." || name == ".." || strings.ContainsAny(name, `/\\`) {
return ErrInvalidName
}
return nil