Browse Source

:art: 改进判断工作空间路径实现 Fix https://github.com/siyuan-note/siyuan/issues/7569

Liang Ding 2 years ago
parent
commit
3c9e80b411
2 changed files with 9 additions and 7 deletions
  1. 4 2
      kernel/api/workspace.go
  2. 5 5
      kernel/util/file.go

+ 4 - 2
kernel/api/workspace.go

@@ -198,8 +198,10 @@ func setWorkspaceDir(c *gin.Context) {
 	}
 
 	if gulu.OS.IsWindows() {
-		installDir := filepath.Dir(util.WorkingDir)
-		if strings.HasPrefix(path, installDir) {
+		// 改进判断工作空间路径实现 https://github.com/siyuan-note/siyuan/issues/7569
+		installDirLower := strings.ToLower(filepath.Dir(util.WorkingDir))
+		pathLower := strings.ToLower(path)
+		if strings.HasPrefix(pathLower, installDirLower) && util.IsSubPath(installDirLower, pathLower) {
 			ret.Code = -1
 			ret.Msg = model.Conf.Language(98)
 			ret.Data = map[string]interface{}{"closeTimeout": 5000}

+ 5 - 5
kernel/util/file.go

@@ -148,13 +148,13 @@ func FilterFileName(name string) string {
 	return name
 }
 
-func IsSubFolder(parent, sub string) bool {
-	if 1 > len(parent) || 1 > len(sub) {
+func IsSubPath(absPath, toCheckPath string) bool {
+	if 1 > len(absPath) || 1 > len(toCheckPath) {
 		return false
 	}
 	if gulu.OS.IsWindows() {
-		if filepath.IsAbs(parent) && filepath.IsAbs(sub) {
-			if strings.ToLower(parent)[0] != strings.ToLower(sub)[0] {
+		if filepath.IsAbs(absPath) && filepath.IsAbs(toCheckPath) {
+			if strings.ToLower(absPath)[0] != strings.ToLower(toCheckPath)[0] {
 				// 不在一个盘
 				return false
 			}
@@ -162,7 +162,7 @@ func IsSubFolder(parent, sub string) bool {
 	}
 
 	up := ".." + string(os.PathSeparator)
-	rel, err := filepath.Rel(parent, sub)
+	rel, err := filepath.Rel(absPath, toCheckPath)
 	if err != nil {
 		return false
 	}