-
Notifications
You must be signed in to change notification settings - Fork 18.4k
Description
The filepath.FromSlash
function sounds like it converts a /-separated path into an operating system path. What it actually does is replace every / in its input with os.PathSeparator
.
FromSlash
can map an input path into semantically different paths on different operating systems. For example, FromSlash("a\b")
returns the filename a\b
on Unix and the file b
in the directory a
on Windows. FromSlash("C:/foo")
returns a relative path on Unix and an absolute path on Windows.
#56694 involves failures in the standard library to safely convert a non-platform-specific /-separated path into a semantically equivalent operating system path. The fix (https://go.dev/cl/455716) introduces an internal function to perform this operation. We should have a public API for this.
The proposal:
// FromFS converts a slash-separated path into an operating system path.
//
// FromFS returns an error if the path cannot be represented by the operating system.
// For example, paths containing '\' and ':' characters are rejected on Windows.
func FromFS(path string) (string, error)
FromFS
rejects empty paths ("") and, on Windows, reserved device names such as NUL.
FromFS
and IsLocal
(#56219) are similar in that both involve performing safety checks on a potentially-untrusted input path. They serve different roles, however:
FromFS
takes a /-separated path in the form operated on by thepath
package and safely converts it to a semantically-equivalent operating system path.IsLocal
takes an operating system path and reports whether it refers to something surprising.