summaryrefslogtreecommitdiff
path: root/src/pkg/mime/multipart/multipart_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'src/pkg/mime/multipart/multipart_test.go')
-rw-r--r--src/pkg/mime/multipart/multipart_test.go32
1 files changed, 32 insertions, 0 deletions
diff --git a/src/pkg/mime/multipart/multipart_test.go b/src/pkg/mime/multipart/multipart_test.go
index 1f3d32d7e..f8f10f3e1 100644
--- a/src/pkg/mime/multipart/multipart_test.go
+++ b/src/pkg/mime/multipart/multipart_test.go
@@ -9,6 +9,7 @@ import (
"fmt"
"io"
"json"
+ "os"
"regexp"
"strings"
"testing"
@@ -205,3 +206,34 @@ func TestVariousTextLineEndings(t *testing.T) {
}
}
+
+type maliciousReader struct {
+ t *testing.T
+ n int
+}
+
+const maxReadThreshold = 1 << 20
+
+func (mr *maliciousReader) Read(b []byte) (n int, err os.Error) {
+ mr.n += len(b)
+ if mr.n >= maxReadThreshold {
+ mr.t.Fatal("too much was read")
+ return 0, os.EOF
+ }
+ return len(b), nil
+}
+
+func TestLineLimit(t *testing.T) {
+ mr := &maliciousReader{t: t}
+ r := NewReader(mr, "fooBoundary")
+ part, err := r.NextPart()
+ if part != nil {
+ t.Errorf("unexpected part read")
+ }
+ if err == nil {
+ t.Errorf("expected an error")
+ }
+ if mr.n >= maxReadThreshold {
+ t.Errorf("expected to read < %d bytes; read %d", maxReadThreshold, mr.n)
+ }
+}