mirror of https://github.com/golang/go.git
The existing implementation of NameSpace implicitly assumes that a
FileSystem with a directory at the top will be mounted at the root
mount point "/" of the NameSpace. If this is not the case, then
Stat("/") will fail even if ReadDir("/") succeedes. This is unexpected
behavior which breaks directory traversal routines (eg. http.FileServer).
This CL adds an unexported implementation of FileSystem called emptyVFS
that emulates an empty directory and adds a NewNameSpace() function that
binds emptyVFS to "/" so that unexpected behavior does not arise even if
the use does not mount anything explicitly at "/".
Latest patch set causes the FileInfo of the empty top level emulated
directory to return "/" for Name() and Zero Time for ModTime() and
removes the related struct state fields being used in the previous
implementation.
Fixes golang/go#14190
Change-Id: Idce2fc3c9b81206847a33840d76b660059d53d18
Reviewed-on: https://go-review.googlesource.com/19445
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>
|
||
|---|---|---|
| .. | ||
| analysis | ||
| dl | ||
| proxy | ||
| redirect | ||
| short | ||
| static | ||
| util | ||
| vfs | ||
| appengine.go | ||
| cmdline.go | ||
| cmdline_test.go | ||
| corpus.go | ||
| dirtrees.go | ||
| format.go | ||
| godoc.go | ||
| godoc_test.go | ||
| index.go | ||
| index_test.go | ||
| linkify.go | ||
| meta.go | ||
| page.go | ||
| parser.go | ||
| pres.go | ||
| search.go | ||
| server.go | ||
| snippet.go | ||
| spec.go | ||
| spot.go | ||
| tab.go | ||
| template.go | ||