webdav: remove redundant trailing slash for root directory
Fixes golang/go#31983
Change-Id: I9925f392ea98cd6618551e936e1dbd5a2a9324c9
GitHub-Last-Rev: dba5c6876ce84ff539c322fb7ab2a37b766f0661
GitHub-Pull-Request: golang/net#42
Reviewed-on: https://go-review.googlesource.com/c/net/+/176737
Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
diff --git a/webdav/webdav.go b/webdav/webdav.go
index b04c5dd..01aed8c 100644
--- a/webdav/webdav.go
+++ b/webdav/webdav.go
@@ -557,7 +557,7 @@
return err
}
href := path.Join(h.Prefix, reqPath)
- if info.IsDir() {
+ if href != "/" && info.IsDir() {
href += "/"
}
return mw.write(makePropstatResponse(href, pstats))
diff --git a/webdav/webdav_test.go b/webdav/webdav_test.go
index 4daa031..2baebe3 100644
--- a/webdav/webdav_test.go
+++ b/webdav/webdav_test.go
@@ -298,20 +298,26 @@
name: `/go<lang`,
wantHref: `/go%3Clang`,
wantDisplayName: `go<lang`,
+ }, {
+ name: `/`,
+ wantHref: `/`,
+ wantDisplayName: ``,
}}
ctx := context.Background()
fs := NewMemFS()
for _, tc := range testCases {
- if strings.HasSuffix(tc.name, "/") {
- if err := fs.Mkdir(ctx, tc.name, 0755); err != nil {
- t.Fatalf("name=%q: Mkdir: %v", tc.name, err)
+ if tc.name != "/" {
+ if strings.HasSuffix(tc.name, "/") {
+ if err := fs.Mkdir(ctx, tc.name, 0755); err != nil {
+ t.Fatalf("name=%q: Mkdir: %v", tc.name, err)
+ }
+ } else {
+ f, err := fs.OpenFile(ctx, tc.name, os.O_CREATE, 0644)
+ if err != nil {
+ t.Fatalf("name=%q: OpenFile: %v", tc.name, err)
+ }
+ f.Close()
}
- } else {
- f, err := fs.OpenFile(ctx, tc.name, os.O_CREATE, 0644)
- if err != nil {
- t.Fatalf("name=%q: OpenFile: %v", tc.name, err)
- }
- f.Close()
}
}