From 57f4cf20996cf8b90b8f814c93db5dc18aaad99e Mon Sep 17 00:00:00 2001 From: Ian Lance Taylor Date: Tue, 3 Sep 2024 11:28:42 -0700 Subject: [PATCH] os: treat Getwd result of EINVAL/ERANGE the same as ENAMETOOLONG At least Darwin and OpenBSD seem to return EINVAL if the resulting name would be too long. Solaris seems to return ERANGE. Fixes #69233 Fixes #69234 Change-Id: I9b51d41461e9576c633bf2fc0e96ca3e4d986255 Reviewed-on: https://go-review.googlesource.com/c/go/+/609579 Reviewed-by: Ian Lance Taylor Auto-Submit: Ian Lance Taylor Reviewed-by: Michael Pratt LUCI-TryBot-Result: Go LUCI Auto-Submit: Ian Lance Taylor --- src/os/error_errno.go | 1 + src/os/error_plan9.go | 1 + src/os/getwd.go | 5 ++++- 3 files changed, 6 insertions(+), 1 deletion(-) diff --git a/src/os/error_errno.go b/src/os/error_errno.go index 01204131be163b..c4d540cdff0944 100644 --- a/src/os/error_errno.go +++ b/src/os/error_errno.go @@ -11,3 +11,4 @@ import "syscall" type syscallErrorType = syscall.Errno const errENOSYS = syscall.ENOSYS +const errERANGE = syscall.ERANGE diff --git a/src/os/error_plan9.go b/src/os/error_plan9.go index 39e96607e197cc..61b56211b4917b 100644 --- a/src/os/error_plan9.go +++ b/src/os/error_plan9.go @@ -9,3 +9,4 @@ import "syscall" type syscallErrorType = syscall.ErrorString var errENOSYS = syscall.NewError("function not implemented") +var errERANGE = syscall.NewError("out of range") diff --git a/src/os/getwd.go b/src/os/getwd.go index 833381c2d25630..8dca70fc2e582e 100644 --- a/src/os/getwd.go +++ b/src/os/getwd.go @@ -59,7 +59,10 @@ func Getwd() (dir string, err error) { break } } - if err != syscall.ENAMETOOLONG { + // Linux returns ENAMETOOLONG if the result is too long. + // BSD systems appear to return EINVAL. + // Solaris appears to use ERANGE. + if err != syscall.ENAMETOOLONG && err != syscall.EINVAL && err != errERANGE { return dir, NewSyscallError("getwd", err) } }