diff options
author | Ian Lance Taylor <iant@golang.org> | 2020-07-27 22:27:54 -0700 |
---|---|---|
committer | Ian Lance Taylor <iant@golang.org> | 2020-08-01 11:21:40 -0700 |
commit | f75af8c1464e948b5e166cf5ab09ebf0d82fc253 (patch) | |
tree | 3ba3299859b504bdeb477727471216bd094a0191 /libgo/go/io/ioutil/tempfile.go | |
parent | 75a23e59031fe673fc3b2e60fd1fe5f4c70ecb85 (diff) | |
download | gcc-f75af8c1464e948b5e166cf5ab09ebf0d82fc253.tar.gz |
libgo: update to go1.15rc1
Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/245157
Diffstat (limited to 'libgo/go/io/ioutil/tempfile.go')
-rw-r--r-- | libgo/go/io/ioutil/tempfile.go | 19 |
1 files changed, 16 insertions, 3 deletions
diff --git a/libgo/go/io/ioutil/tempfile.go b/libgo/go/io/ioutil/tempfile.go index 3aa23c5f017..af7c6fd7c1a 100644 --- a/libgo/go/io/ioutil/tempfile.go +++ b/libgo/go/io/ioutil/tempfile.go @@ -5,6 +5,7 @@ package ioutil import ( + "errors" "os" "path/filepath" "strconv" @@ -52,7 +53,10 @@ func TempFile(dir, pattern string) (f *os.File, err error) { dir = os.TempDir() } - prefix, suffix := prefixAndSuffix(pattern) + prefix, suffix, err := prefixAndSuffix(pattern) + if err != nil { + return + } nconflict := 0 for i := 0; i < 10000; i++ { @@ -71,9 +75,15 @@ func TempFile(dir, pattern string) (f *os.File, err error) { return } +var errPatternHasSeparator = errors.New("pattern contains path separator") + // prefixAndSuffix splits pattern by the last wildcard "*", if applicable, // returning prefix as the part before "*" and suffix as the part after "*". -func prefixAndSuffix(pattern string) (prefix, suffix string) { +func prefixAndSuffix(pattern string) (prefix, suffix string, err error) { + if strings.ContainsRune(pattern, os.PathSeparator) { + err = errPatternHasSeparator + return + } if pos := strings.LastIndex(pattern, "*"); pos != -1 { prefix, suffix = pattern[:pos], pattern[pos+1:] } else { @@ -96,7 +106,10 @@ func TempDir(dir, pattern string) (name string, err error) { dir = os.TempDir() } - prefix, suffix := prefixAndSuffix(pattern) + prefix, suffix, err := prefixAndSuffix(pattern) + if err != nil { + return + } nconflict := 0 for i := 0; i < 10000; i++ { |