@@ -331,6 +331,11 @@ func (p *Part) Close() error {
331
331
// Reader's underlying parser consumes its input as needed. Seeking
332
332
// isn't supported.
333
333
type Reader struct {
334
+ // MaxMIMEHeaderSize is the maximum size of a MIME header we will parse,
335
+ // including header keys, values, and map overhead. If not set, then the
336
+ // default value of 10 << 20 is used.
337
+ MaxMIMEHeaderSize int64
338
+
334
339
bufReader * bufio.Reader
335
340
tempDir string // used in tests
336
341
@@ -362,14 +367,25 @@ func maxMIMEHeaders() int64 {
362
367
return 10000
363
368
}
364
369
370
+ // maxMIMEHeaderSize returns the maximum size of a MIME header we will parse.
371
+ // It uses the value of Reader.MaxMIMEHeaderSize if it is not 0, otherwise the
372
+ // value of maxMIMEHeaderSize constant is used.
373
+ func (r * Reader ) maxMIMEHeaderSize () int64 {
374
+ if r .MaxMIMEHeaderSize != 0 {
375
+ return r .MaxMIMEHeaderSize
376
+ } else {
377
+ return maxMIMEHeaderSize
378
+ }
379
+ }
380
+
365
381
// NextPart returns the next part in the multipart or an error.
366
382
// When there are no more parts, the error [io.EOF] is returned.
367
383
//
368
384
// As a special case, if the "Content-Transfer-Encoding" header
369
385
// has a value of "quoted-printable", that header is instead
370
386
// hidden and the body is transparently decoded during Read calls.
371
387
func (r * Reader ) NextPart () (* Part , error ) {
372
- return r .nextPart (false , maxMIMEHeaderSize , maxMIMEHeaders ())
388
+ return r .nextPart (false , r . maxMIMEHeaderSize () , maxMIMEHeaders ())
373
389
}
374
390
375
391
// NextRawPart returns the next part in the multipart or an error.
@@ -378,7 +394,7 @@ func (r *Reader) NextPart() (*Part, error) {
378
394
// Unlike [Reader.NextPart], it does not have special handling for
379
395
// "Content-Transfer-Encoding: quoted-printable".
380
396
func (r * Reader ) NextRawPart () (* Part , error ) {
381
- return r .nextPart (true , maxMIMEHeaderSize , maxMIMEHeaders ())
397
+ return r .nextPart (true , r . maxMIMEHeaderSize () , maxMIMEHeaders ())
382
398
}
383
399
384
400
func (r * Reader ) nextPart (rawPart bool , maxMIMEHeaderSize , maxMIMEHeaders int64 ) (* Part , error ) {
0 commit comments