summaryrefslogtreecommitdiff
path: root/libgo/go/io/ioutil/tempfile.go
diff options
context:
space:
mode:
authorIan Lance Taylor <iant@golang.org>2020-07-27 22:27:54 -0700
committerIan Lance Taylor <iant@golang.org>2020-08-01 11:21:40 -0700
commitf75af8c1464e948b5e166cf5ab09ebf0d82fc253 (patch)
tree3ba3299859b504bdeb477727471216bd094a0191 /libgo/go/io/ioutil/tempfile.go
parent75a23e59031fe673fc3b2e60fd1fe5f4c70ecb85 (diff)
downloadgcc-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.go19
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++ {