@@ -56,40 +56,58 @@ func TestLookPath(t *testing.T) {
56
56
57
57
// Add "." to PATH so that exec.LookPath looks in the current directory on all systems.
58
58
// And try to trick it with "../testdir" too.
59
- for _ , dir := range []string {"." , "../testdir" } {
60
- t .Run (pathVar + "=" + dir , func (t * testing.T ) {
61
- t .Setenv (pathVar , dir + string (filepath .ListSeparator )+ origPath )
62
- good := dir + "/execabs-test"
63
- if found , err := LookPath (good ); err != nil || ! strings .HasPrefix (found , good ) {
64
- t .Fatalf (`LookPath(%#q) = %#q, %v, want "%s...", nil` , good , found , err , good )
65
- }
66
- if runtime .GOOS == "windows" {
67
- good = dir + `\execabs-test`
68
- if found , err := LookPath (good ); err != nil || ! strings .HasPrefix (found , good ) {
69
- t .Fatalf (`LookPath(%#q) = %#q, %v, want "%s...", nil` , good , found , err , good )
70
- }
71
- }
72
-
73
- if _ , err := LookPath ("execabs-test" ); err == nil {
74
- t .Fatalf ("LookPath didn't fail when finding a non-relative path" )
75
- } else if ! errors .Is (err , ErrDot ) {
76
- t .Fatalf ("LookPath returned unexpected error: want Is ErrDot, got %q" , err )
77
- }
78
-
79
- cmd := Command ("execabs-test" )
80
- if cmd .Err == nil {
81
- t .Fatalf ("Command didn't fail when finding a non-relative path" )
82
- } else if ! errors .Is (cmd .Err , ErrDot ) {
83
- t .Fatalf ("Command returned unexpected error: want Is ErrDot, got %q" , cmd .Err )
84
- }
85
- cmd .Err = nil
86
-
87
- // Clearing cmd.Err should let the execution proceed,
88
- // and it should fail because it's not a valid binary.
89
- if err := cmd .Run (); err == nil {
90
- t .Fatalf ("Run did not fail: expected exec error" )
91
- } else if errors .Is (err , ErrDot ) {
92
- t .Fatalf ("Run returned unexpected error ErrDot: want error like ENOEXEC: %q" , err )
59
+ for _ , errdot := range []string {"1" , "0" } {
60
+ t .Run ("GODEBUG=execerrdot=" + errdot , func (t * testing.T ) {
61
+ t .Setenv ("GODEBUG" , "execerrdot=" + errdot )
62
+ for _ , dir := range []string {"." , "../testdir" } {
63
+ t .Run (pathVar + "=" + dir , func (t * testing.T ) {
64
+ t .Setenv (pathVar , dir + string (filepath .ListSeparator )+ origPath )
65
+ good := dir + "/execabs-test"
66
+ if found , err := LookPath (good ); err != nil || ! strings .HasPrefix (found , good ) {
67
+ t .Fatalf (`LookPath(%#q) = %#q, %v, want "%s...", nil` , good , found , err , good )
68
+ }
69
+ if runtime .GOOS == "windows" {
70
+ good = dir + `\execabs-test`
71
+ if found , err := LookPath (good ); err != nil || ! strings .HasPrefix (found , good ) {
72
+ t .Fatalf (`LookPath(%#q) = %#q, %v, want "%s...", nil` , good , found , err , good )
73
+ }
74
+ }
75
+
76
+ _ , err := LookPath ("execabs-test" )
77
+ if errdot == "1" {
78
+ if err == nil {
79
+ t .Fatalf ("LookPath didn't fail when finding a non-relative path" )
80
+ } else if ! errors .Is (err , ErrDot ) {
81
+ t .Fatalf ("LookPath returned unexpected error: want Is ErrDot, got %q" , err )
82
+ }
83
+ } else {
84
+ if err != nil {
85
+ t .Fatalf ("LookPath failed unexpectedly: %v" , err )
86
+ }
87
+ }
88
+
89
+ cmd := Command ("execabs-test" )
90
+ if errdot == "1" {
91
+ if cmd .Err == nil {
92
+ t .Fatalf ("Command didn't fail when finding a non-relative path" )
93
+ } else if ! errors .Is (cmd .Err , ErrDot ) {
94
+ t .Fatalf ("Command returned unexpected error: want Is ErrDot, got %q" , cmd .Err )
95
+ }
96
+ cmd .Err = nil
97
+ } else {
98
+ if cmd .Err != nil {
99
+ t .Fatalf ("Command failed unexpectedly: %v" , err )
100
+ }
101
+ }
102
+
103
+ // Clearing cmd.Err should let the execution proceed,
104
+ // and it should fail because it's not a valid binary.
105
+ if err := cmd .Run (); err == nil {
106
+ t .Fatalf ("Run did not fail: expected exec error" )
107
+ } else if errors .Is (err , ErrDot ) {
108
+ t .Fatalf ("Run returned unexpected error ErrDot: want error like ENOEXEC: %q" , err )
109
+ }
110
+ })
93
111
}
94
112
})
95
113
}
0 commit comments