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&lt;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()
 		}
 	}