io/ioutil: fix crash when Stat fails

Fixes #3320.

R=golang-dev, gri
CC=golang-dev
https://golang.org/cl/5824051
This commit is contained in:
Russ Cox 2012-03-14 14:47:13 -04:00
parent b2a9079e54
commit 70e58a2f9b
1 changed files with 6 additions and 3 deletions

View File

@ -53,10 +53,13 @@ func ReadFile(filename string) ([]byte, error) {
defer f.Close()
// It's a good but not certain bet that FileInfo will tell us exactly how much to
// read, so let's try it but be prepared for the answer to be wrong.
fi, err := f.Stat()
var n int64
if size := fi.Size(); err == nil && size < 2e9 { // Don't preallocate a huge buffer, just in case.
n = size
if fi, err := f.Stat(); err == nil {
// Don't preallocate a huge buffer, just in case.
if size := fi.Size(); size < 1e9 {
n = size
}
}
// As initial capacity for readAll, use n + a little extra in case Size is zero,
// and to avoid another allocation after Read has filled the buffer. The readAll