aboutsummaryrefslogtreecommitdiff
path: root/src/mime
diff options
context:
space:
mode:
authorKatie Hockman <katie@golang.org>2020-12-14 10:03:05 -0500
committerKatie Hockman <katie@golang.org>2020-12-14 10:06:13 -0500
commit0345ede87ee12698988973884cfc0fd3d499dffd (patch)
tree7123cff141ee5661208d2f5f437b8f5252ac7f6a /src/mime
parent4651d6b267818b0e0d128a5443289717c4bb8cbc (diff)
parent0a02371b0576964e81c3b40d328db9a3ef3b031b (diff)
downloadgo-0345ede87ee12698988973884cfc0fd3d499dffd.tar.xz
[dev.fuzz] all: merge master into dev.fuzz
Change-Id: I5d8c8329ccc9d747bd81ade6b1cb7cb8ae2e94b2
Diffstat (limited to 'src/mime')
-rw-r--r--src/mime/encodedword_test.go3
-rw-r--r--src/mime/example_test.go5
-rw-r--r--src/mime/multipart/example_test.go3
-rw-r--r--src/mime/multipart/formdata.go11
-rw-r--r--src/mime/multipart/formdata_test.go14
-rw-r--r--src/mime/multipart/multipart.go3
-rw-r--r--src/mime/multipart/multipart_test.go13
-rw-r--r--src/mime/multipart/writer_test.go8
-rw-r--r--src/mime/quotedprintable/example_test.go4
-rw-r--r--src/mime/quotedprintable/writer_test.go6
-rw-r--r--src/mime/type_unix.go1
-rw-r--r--src/mime/type_windows.go2
12 files changed, 45 insertions, 28 deletions
diff --git a/src/mime/encodedword_test.go b/src/mime/encodedword_test.go
index 6c54e502ad..2a98794380 100644
--- a/src/mime/encodedword_test.go
+++ b/src/mime/encodedword_test.go
@@ -7,7 +7,6 @@ package mime
import (
"errors"
"io"
- "io/ioutil"
"strings"
"testing"
)
@@ -182,7 +181,7 @@ func TestCharsetDecoder(t *testing.T) {
if charset != test.charsets[i] {
t.Errorf("DecodeHeader(%q), got charset %q, want %q", test.src, charset, test.charsets[i])
}
- content, err := ioutil.ReadAll(input)
+ content, err := io.ReadAll(input)
if err != nil {
t.Errorf("DecodeHeader(%q), error in reader: %v", test.src, err)
}
diff --git a/src/mime/example_test.go b/src/mime/example_test.go
index 85795976f0..8a96873e5d 100644
--- a/src/mime/example_test.go
+++ b/src/mime/example_test.go
@@ -8,7 +8,6 @@ import (
"bytes"
"fmt"
"io"
- "io/ioutil"
"mime"
)
@@ -38,7 +37,7 @@ func ExampleWordDecoder_Decode() {
// Fake character set for example.
// Real use would integrate with packages such
// as code.google.com/p/go-charset
- content, err := ioutil.ReadAll(input)
+ content, err := io.ReadAll(input)
if err != nil {
return nil, err
}
@@ -77,7 +76,7 @@ func ExampleWordDecoder_DecodeHeader() {
// Fake character set for example.
// Real use would integrate with packages such
// as code.google.com/p/go-charset
- content, err := ioutil.ReadAll(input)
+ content, err := io.ReadAll(input)
if err != nil {
return nil, err
}
diff --git a/src/mime/multipart/example_test.go b/src/mime/multipart/example_test.go
index 6d6ba81d5e..fe154ac4f6 100644
--- a/src/mime/multipart/example_test.go
+++ b/src/mime/multipart/example_test.go
@@ -7,7 +7,6 @@ package multipart_test
import (
"fmt"
"io"
- "io/ioutil"
"log"
"mime"
"mime/multipart"
@@ -39,7 +38,7 @@ func ExampleNewReader() {
if err != nil {
log.Fatal(err)
}
- slurp, err := ioutil.ReadAll(p)
+ slurp, err := io.ReadAll(p)
if err != nil {
log.Fatal(err)
}
diff --git a/src/mime/multipart/formdata.go b/src/mime/multipart/formdata.go
index 832d0ad693..fca5f9e15f 100644
--- a/src/mime/multipart/formdata.go
+++ b/src/mime/multipart/formdata.go
@@ -8,7 +8,7 @@ import (
"bytes"
"errors"
"io"
- "io/ioutil"
+ "math"
"net/textproto"
"os"
)
@@ -41,6 +41,13 @@ func (r *Reader) readForm(maxMemory int64) (_ *Form, err error) {
// Reserve an additional 10 MB for non-file parts.
maxValueBytes := maxMemory + int64(10<<20)
+ if maxValueBytes <= 0 {
+ if maxMemory < 0 {
+ maxValueBytes = 0
+ } else {
+ maxValueBytes = math.MaxInt64
+ }
+ }
for {
p, err := r.NextPart()
if err == io.EOF {
@@ -83,7 +90,7 @@ func (r *Reader) readForm(maxMemory int64) (_ *Form, err error) {
}
if n > maxMemory {
// too big, write to disk and flush buffer
- file, err := ioutil.TempFile("", "multipart-")
+ file, err := os.CreateTemp("", "multipart-")
if err != nil {
return nil, err
}
diff --git a/src/mime/multipart/formdata_test.go b/src/mime/multipart/formdata_test.go
index 7d756c8c24..e3a3a3eae8 100644
--- a/src/mime/multipart/formdata_test.go
+++ b/src/mime/multipart/formdata_test.go
@@ -7,6 +7,7 @@ package multipart
import (
"bytes"
"io"
+ "math"
"os"
"strings"
"testing"
@@ -52,6 +53,19 @@ func TestReadFormWithNamelessFile(t *testing.T) {
}
}
+// Issue 40430: Handle ReadForm(math.MaxInt64)
+func TestReadFormMaxMemoryOverflow(t *testing.T) {
+ b := strings.NewReader(strings.ReplaceAll(messageWithTextContentType, "\n", "\r\n"))
+ r := NewReader(b, boundary)
+ f, err := r.ReadForm(math.MaxInt64)
+ if err != nil {
+ t.Fatalf("ReadForm(MaxInt64): %v", err)
+ }
+ if f == nil {
+ t.Fatal("ReadForm(MaxInt64): missing form")
+ }
+}
+
func TestReadFormWithTextContentType(t *testing.T) {
// From https://github.com/golang/go/issues/24041
b := strings.NewReader(strings.ReplaceAll(messageWithTextContentType, "\n", "\r\n"))
diff --git a/src/mime/multipart/multipart.go b/src/mime/multipart/multipart.go
index 1750300fb5..cb8bf39338 100644
--- a/src/mime/multipart/multipart.go
+++ b/src/mime/multipart/multipart.go
@@ -17,7 +17,6 @@ import (
"bytes"
"fmt"
"io"
- "io/ioutil"
"mime"
"mime/quotedprintable"
"net/textproto"
@@ -278,7 +277,7 @@ func matchAfterPrefix(buf, prefix []byte, readErr error) int {
}
func (p *Part) Close() error {
- io.Copy(ioutil.Discard, p)
+ io.Copy(io.Discard, p)
return nil
}
diff --git a/src/mime/multipart/multipart_test.go b/src/mime/multipart/multipart_test.go
index b60c54a204..741d2304ed 100644
--- a/src/mime/multipart/multipart_test.go
+++ b/src/mime/multipart/multipart_test.go
@@ -9,7 +9,6 @@ import (
"encoding/json"
"fmt"
"io"
- "io/ioutil"
"net/textproto"
"os"
"reflect"
@@ -307,7 +306,7 @@ Oh no, premature EOF!
if err != nil {
t.Fatalf("didn't get a part")
}
- _, err = io.Copy(ioutil.Discard, part)
+ _, err = io.Copy(io.Discard, part)
if err != io.ErrUnexpectedEOF {
t.Fatalf("expected error io.ErrUnexpectedEOF; got %v", err)
}
@@ -372,7 +371,7 @@ Body 2
if !reflect.DeepEqual(part.Header, hdr) {
t.Errorf("Part %d: part.Header = %v, want %v", i, part.Header, hdr)
}
- data, err := ioutil.ReadAll(part)
+ data, err := io.ReadAll(part)
expectEq(t, body, string(data), fmt.Sprintf("Part %d body", i))
if err != nil {
t.Fatalf("Part %d: ReadAll failed: %v", i, err)
@@ -530,14 +529,14 @@ func TestNested(t *testing.T) {
if err != nil {
t.Fatalf("reading text/plain part: %v", err)
}
- if b, err := ioutil.ReadAll(p); string(b) != "*body*\r\n" || err != nil {
+ if b, err := io.ReadAll(p); string(b) != "*body*\r\n" || err != nil {
t.Fatalf("reading text/plain part: got %q, %v", b, err)
}
p, err = mr2.NextPart()
if err != nil {
t.Fatalf("reading text/html part: %v", err)
}
- if b, err := ioutil.ReadAll(p); string(b) != "<b>body</b>\r\n" || err != nil {
+ if b, err := io.ReadAll(p); string(b) != "<b>body</b>\r\n" || err != nil {
t.Fatalf("reading text/html part: got %q, %v", b, err)
}
@@ -850,7 +849,7 @@ Cases:
t.Errorf("in test %q, NextPart: %v", tt.name, err)
continue Cases
}
- pbody, err := ioutil.ReadAll(p)
+ pbody, err := io.ReadAll(p)
if err != nil {
t.Errorf("in test %q, error reading part: %v", tt.name, err)
continue Cases
@@ -882,7 +881,7 @@ func partsFromReader(r *Reader) ([]headerBody, error) {
if err != nil {
return nil, fmt.Errorf("NextPart: %v", err)
}
- pbody, err := ioutil.ReadAll(p)
+ pbody, err := io.ReadAll(p)
if err != nil {
return nil, fmt.Errorf("error reading part: %v", err)
}
diff --git a/src/mime/multipart/writer_test.go b/src/mime/multipart/writer_test.go
index b89b093fff..cfc0f09f37 100644
--- a/src/mime/multipart/writer_test.go
+++ b/src/mime/multipart/writer_test.go
@@ -6,7 +6,7 @@ package multipart
import (
"bytes"
- "io/ioutil"
+ "io"
"mime"
"net/textproto"
"strings"
@@ -51,7 +51,7 @@ func TestWriter(t *testing.T) {
if g, e := part.FormName(), "myfile"; g != e {
t.Errorf("part 1: want form name %q, got %q", e, g)
}
- slurp, err := ioutil.ReadAll(part)
+ slurp, err := io.ReadAll(part)
if err != nil {
t.Fatalf("part 1: ReadAll: %v", err)
}
@@ -66,7 +66,7 @@ func TestWriter(t *testing.T) {
if g, e := part.FormName(), "key"; g != e {
t.Errorf("part 2: want form name %q, got %q", e, g)
}
- slurp, err = ioutil.ReadAll(part)
+ slurp, err = io.ReadAll(part)
if err != nil {
t.Fatalf("part 2: ReadAll: %v", err)
}
@@ -134,7 +134,7 @@ func TestWriterBoundaryGoroutines(t *testing.T) {
// different goroutines. This was previously broken by
// https://codereview.appspot.com/95760043/ and reverted in
// https://codereview.appspot.com/117600043/
- w := NewWriter(ioutil.Discard)
+ w := NewWriter(io.Discard)
done := make(chan int)
go func() {
w.CreateFormField("foo")
diff --git a/src/mime/quotedprintable/example_test.go b/src/mime/quotedprintable/example_test.go
index 5a9ab450a3..e5a479a3a7 100644
--- a/src/mime/quotedprintable/example_test.go
+++ b/src/mime/quotedprintable/example_test.go
@@ -6,7 +6,7 @@ package quotedprintable_test
import (
"fmt"
- "io/ioutil"
+ "io"
"mime/quotedprintable"
"os"
"strings"
@@ -18,7 +18,7 @@ func ExampleNewReader() {
`invalid escape: <b style="font-size: 200%">hello</b>`,
"Hello, Gophers! This symbol will be unescaped: =3D and this will be written in =\r\none line.",
} {
- b, err := ioutil.ReadAll(quotedprintable.NewReader(strings.NewReader(s)))
+ b, err := io.ReadAll(quotedprintable.NewReader(strings.NewReader(s)))
fmt.Printf("%s %v\n", b, err)
}
// Output:
diff --git a/src/mime/quotedprintable/writer_test.go b/src/mime/quotedprintable/writer_test.go
index d494c1e3dc..42de0f3d6e 100644
--- a/src/mime/quotedprintable/writer_test.go
+++ b/src/mime/quotedprintable/writer_test.go
@@ -6,7 +6,7 @@ package quotedprintable
import (
"bytes"
- "io/ioutil"
+ "io"
"strings"
"testing"
)
@@ -128,7 +128,7 @@ func TestRoundTrip(t *testing.T) {
}
r := NewReader(buf)
- gotBytes, err := ioutil.ReadAll(r)
+ gotBytes, err := io.ReadAll(r)
if err != nil {
t.Fatalf("Error while reading from Reader: %v", err)
}
@@ -151,7 +151,7 @@ var testMsg = []byte("Quoted-Printable (QP) est un format d'encodage de données
func BenchmarkWriter(b *testing.B) {
for i := 0; i < b.N; i++ {
- w := NewWriter(ioutil.Discard)
+ w := NewWriter(io.Discard)
w.Write(testMsg)
w.Close()
}
diff --git a/src/mime/type_unix.go b/src/mime/type_unix.go
index 0b247b623a..3a25002842 100644
--- a/src/mime/type_unix.go
+++ b/src/mime/type_unix.go
@@ -20,6 +20,7 @@ var typeFiles = []string{
"/etc/mime.types",
"/etc/apache2/mime.types",
"/etc/apache/mime.types",
+ "/etc/httpd/conf/mime.types",
}
func loadMimeFile(filename string) {
diff --git a/src/mime/type_windows.go b/src/mime/type_windows.go
index 97b9aeba7a..cee9c9db04 100644
--- a/src/mime/type_windows.go
+++ b/src/mime/type_windows.go
@@ -13,7 +13,7 @@ func init() {
}
func initMimeWindows() {
- names, err := registry.CLASSES_ROOT.ReadSubKeyNames(-1)
+ names, err := registry.CLASSES_ROOT.ReadSubKeyNames()
if err != nil {
return
}