]> Cypherpunks repositories - gostls13.git/commitdiff
io/fs: set ErrInvalid for FS.Open from SubFS when it fails ValidPath
authorAndy Pan <panjf2000@gmail.com>
Thu, 1 Feb 2024 03:28:44 +0000 (11:28 +0800)
committerGopher Robot <gobot@golang.org>
Sat, 10 Feb 2024 02:10:17 +0000 (02:10 +0000)
Fixes #65419

Change-Id: I8f9f82ab0387d8bb39aaca4f9e60e36ee15c587d
Reviewed-on: https://go-review.googlesource.com/c/go/+/560137
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
Reviewed-by: Dmitri Shuralyov <dmitshur@google.com>
Auto-Submit: Ian Lance Taylor <iant@google.com>
Reviewed-by: Ian Lance Taylor <iant@google.com>
src/io/fs/sub.go
src/io/fs/sub_test.go

index 9999e63b26f2c3b843d0679d0520d068c03952f9..70ac62307778ed2ed80a48498849ac2acbbd4f0d 100644 (file)
@@ -33,7 +33,7 @@ type SubFS interface {
 // chroot-style security mechanism, and Sub does not change that fact.
 func Sub(fsys FS, dir string) (FS, error) {
        if !ValidPath(dir) {
-               return nil, &PathError{Op: "sub", Path: dir, Err: errors.New("invalid name")}
+               return nil, &PathError{Op: "sub", Path: dir, Err: ErrInvalid}
        }
        if dir == "." {
                return fsys, nil
@@ -52,7 +52,7 @@ type subFS struct {
 // fullName maps name to the fully-qualified name dir/name.
 func (f *subFS) fullName(op string, name string) (string, error) {
        if !ValidPath(name) {
-               return "", &PathError{Op: op, Path: name, Err: errors.New("invalid name")}
+               return "", &PathError{Op: op, Path: name, Err: ErrInvalid}
        }
        return path.Join(f.dir, name), nil
 }
index 451b0efb02f1856b4cf1c4f31f2b1879dfc97170..c0bb2fd5b84a5ec144fca84a5689efa47b77b23a 100644 (file)
@@ -5,6 +5,7 @@
 package fs_test
 
 import (
+       "errors"
        . "io/fs"
        "testing"
 )
@@ -54,4 +55,9 @@ func TestSub(t *testing.T) {
        if pe.Path != "nonexist" {
                t.Fatalf("Open(nonexist): err.Path = %q, want %q", pe.Path, "nonexist")
        }
+
+       _, err = sub.Open("./")
+       if !errors.Is(err, ErrInvalid) {
+               t.Fatalf("Open(./): error is %v, want %v", err, ErrInvalid)
+       }
 }