From af416016661c34cde8e7e1eb2a03e3959fcb8595 Mon Sep 17 00:00:00 2001 From: Kir Kolyshkin Date: Mon, 14 Feb 2022 12:03:02 -0800 Subject: [PATCH] Don't call open("") strings.Split(s, sep) returns a slice of a single element containing s if sep is not found in s. This is true even if s is empty. As a result, every call to flagFromEnvOrFile results in an attempt to open a file with empty name. This is seen from strace as [pid 3287620] openat(AT_FDCWD, "", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory) [pid 3287620] openat(AT_FDCWD, "", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory) ... To fix, check if the string is empty before calling ReadFile. This also fixes cases where filePath is non-empty but has extra commas. Signed-off-by: Kir Kolyshkin --- flag.go | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/flag.go b/flag.go index 125c6cecce..49682f2994 100644 --- a/flag.go +++ b/flag.go @@ -434,8 +434,10 @@ func flagFromEnvOrFile(envVars []string, filePath string) (val string, ok bool) } } for _, fileVar := range strings.Split(filePath, ",") { - if data, err := ioutil.ReadFile(fileVar); err == nil { - return string(data), true + if fileVar != "" { + if data, err := ioutil.ReadFile(fileVar); err == nil { + return string(data), true + } } } return "", false