5
0
mirror of https://github.com/wailsapp/wails.git synced 2025-05-03 22:02:01 +08:00

Merge pull request #4188 from TheGB0077/patch-2

[v3] Normalize Windows paths on system Dialogs invocations
This commit is contained in:
Lea Anthony 2025-04-12 12:32:05 +10:00 committed by GitHub
commit 0a05348220
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 73 additions and 2 deletions

View File

@ -112,6 +112,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- Fixed initially-hidden menu items by [@IanVS](https://github.com/IanVS) in [#4116](https://github.com/wailsapp/wails/pull/4116)
- Fixed assetFileServer not serving `.html` files when non-extension request when `[request]` doesn't exist but `[request].html` does
- Fixed icon generation paths by [@robin-samuel](https://github.com/robin-samuel) in [#4125](https://github.com/wailsapp/wails/pull/4125)
- Fixed Dialogs runtime function returning escaped paths on Windows by [TheGB0077](https://github.com/TheGB0077) in [#4188](https://github.com/wailsapp/wails/pull/4188)
### Changed

View File

@ -247,7 +247,20 @@ func showCfdDialog(newDlg func() (cfd.Dialog, error), isMultiSelect bool) (any,
}()
if multi, _ := dlg.(cfd.OpenMultipleFilesDialog); multi != nil && isMultiSelect {
return multi.ShowAndGetResults()
paths, err := multi.ShowAndGetResults()
if err != nil {
return nil, err
}
for i, path := range paths {
paths[i] = filepath.Clean(path)
}
return paths, nil
}
return dlg.ShowAndGetResult()
path, err := dlg.ShowAndGetResult()
if err != nil {
return nil, err
}
return filepath.Clean(path), nil
}

View File

@ -0,0 +1,57 @@
//go:build windows
package application_test
import (
"path/filepath"
"testing"
"github.com/matryer/is"
)
func TestCleanPath(t *testing.T) {
i := is.New(t)
tests := []struct {
name string
inputPath string
expected string
}{
{
name: "path with double separators",
inputPath: `C:\\temp\\folder`,
expected: `C:\temp\folder`,
},
{
name: "path with forward slashes",
inputPath: `C://temp//folder`,
expected: `C:\temp\folder`,
},
{
name: "path with trailing separator",
inputPath: `C:\\temp\\folder\\`,
expected: `C:\temp\folder`,
},
{
name: "path with escaped tab character",
inputPath: `C:\\Users\\test\\tab.txt`,
expected: `C:\Users\test\tab.txt`,
},
{
name: "newline character",
inputPath: `C:\\Users\\test\\newline\\n.txt`,
expected: `C:\Users\test\newline\n.txt`,
},
{
name: "UNC path with multiple separators",
inputPath: `\\\\\\\\host\\share\\test.txt`,
expected: `\\\\host\share\test.txt`,
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
cleaned := filepath.Clean(tt.inputPath)
i.Equal(cleaned, tt.expected)
})
}
}