aboutsummaryrefslogtreecommitdiff
path: root/libgo/go/mime
diff options
context:
space:
mode:
authorIan Lance Taylor <iant@golang.org>2020-12-23 09:57:37 -0800
committerIan Lance Taylor <iant@golang.org>2020-12-30 15:13:24 -0800
commitcfcbb4227fb20191e04eb8d7766ae6202f526afd (patch)
treee2effea96f6f204451779f044415c2385e45042b /libgo/go/mime
parent0696141107d61483f38482b941549959a0d7f613 (diff)
downloadgcc-cfcbb4227fb20191e04eb8d7766ae6202f526afd.zip
gcc-cfcbb4227fb20191e04eb8d7766ae6202f526afd.tar.gz
gcc-cfcbb4227fb20191e04eb8d7766ae6202f526afd.tar.bz2
libgo: update to Go1.16beta1 release
This does not yet include support for the //go:embed directive added in this release. * Makefile.am (check-runtime): Don't create check-runtime-dir. (mostlyclean-local): Don't remove check-runtime-dir. (check-go-tool, check-vet): Copy in go.mod and modules.txt. (check-cgo-test, check-carchive-test): Add go.mod file. * Makefile.in: Regenerate. Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/280172
Diffstat (limited to 'libgo/go/mime')
-rw-r--r--libgo/go/mime/encodedword_test.go3
-rw-r--r--libgo/go/mime/example_test.go31
-rw-r--r--libgo/go/mime/multipart/formdata.go11
-rw-r--r--libgo/go/mime/multipart/formdata_test.go14
-rw-r--r--libgo/go/mime/multipart/multipart.go3
-rw-r--r--libgo/go/mime/multipart/multipart_test.go13
-rw-r--r--libgo/go/mime/multipart/writer_test.go8
-rw-r--r--libgo/go/mime/quotedprintable/example_test.go4
-rw-r--r--libgo/go/mime/quotedprintable/writer_test.go6
-rw-r--r--libgo/go/mime/type_unix.go1
-rw-r--r--libgo/go/mime/type_windows.go2
11 files changed, 70 insertions, 26 deletions
diff --git a/libgo/go/mime/encodedword_test.go b/libgo/go/mime/encodedword_test.go
index 6c54e50..2a98794 100644
--- a/libgo/go/mime/encodedword_test.go
+++ b/libgo/go/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/libgo/go/mime/example_test.go b/libgo/go/mime/example_test.go
index c7d13cd..8a96873 100644
--- a/libgo/go/mime/example_test.go
+++ b/libgo/go/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
}
@@ -96,3 +95,29 @@ func ExampleWordDecoder_DecodeHeader() {
// ¡Hola, señor!
// HELLO WORLD!
}
+
+func ExampleFormatMediaType() {
+ mediatype := "text/html"
+ params := map[string]string{
+ "charset": "utf-8",
+ }
+
+ result := mime.FormatMediaType(mediatype, params)
+
+ fmt.Println("result:", result)
+ // Output:
+ // result: text/html; charset=utf-8
+}
+
+func ExampleParseMediaType() {
+ mediatype, params, err := mime.ParseMediaType("text/html; charset=utf-8")
+ if err != nil {
+ panic(err)
+ }
+
+ fmt.Println("type:", mediatype)
+ fmt.Println("charset:", params["charset"])
+ // Output:
+ // type: text/html
+ // charset: utf-8
+}
diff --git a/libgo/go/mime/multipart/formdata.go b/libgo/go/mime/multipart/formdata.go
index 832d0ad..fca5f9e 100644
--- a/libgo/go/mime/multipart/formdata.go
+++ b/libgo/go/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/libgo/go/mime/multipart/formdata_test.go b/libgo/go/mime/multipart/formdata_test.go
index 7d756c8..e3a3a3e 100644
--- a/libgo/go/mime/multipart/formdata_test.go
+++ b/libgo/go/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/libgo/go/mime/multipart/multipart.go b/libgo/go/mime/multipart/multipart.go
index 1750300..cb8bf393 100644
--- a/libgo/go/mime/multipart/multipart.go
+++ b/libgo/go/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/libgo/go/mime/multipart/multipart_test.go b/libgo/go/mime/multipart/multipart_test.go
index b60c54a..741d230 100644
--- a/libgo/go/mime/multipart/multipart_test.go
+++ b/libgo/go/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/libgo/go/mime/multipart/writer_test.go b/libgo/go/mime/multipart/writer_test.go
index b89b093..cfc0f09 100644
--- a/libgo/go/mime/multipart/writer_test.go
+++ b/libgo/go/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/libgo/go/mime/quotedprintable/example_test.go b/libgo/go/mime/quotedprintable/example_test.go
index 5a9ab45..e5a479a 100644
--- a/libgo/go/mime/quotedprintable/example_test.go
+++ b/libgo/go/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/libgo/go/mime/quotedprintable/writer_test.go b/libgo/go/mime/quotedprintable/writer_test.go
index d494c1e..42de0f3 100644
--- a/libgo/go/mime/quotedprintable/writer_test.go
+++ b/libgo/go/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/libgo/go/mime/type_unix.go b/libgo/go/mime/type_unix.go
index 5db1b68..6ac056c 100644
--- a/libgo/go/mime/type_unix.go
+++ b/libgo/go/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/libgo/go/mime/type_windows.go b/libgo/go/mime/type_windows.go
index 97b9aeb..cee9c9d 100644
--- a/libgo/go/mime/type_windows.go
+++ b/libgo/go/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
}