forked from TrueCloudLab/frostfs-http-gw
parent
562c7e994c
commit
b0b724393a
1 changed files with 17 additions and 17 deletions
|
@ -107,7 +107,7 @@ func NewReader(r io.Reader, boundary string) *Reader {
|
|||
// underlying Reader once an error has been seen. (the io.Reader
|
||||
// interface's contract promises nothing about the return values of
|
||||
// Read calls after an error, yet this package does do multiple Reads
|
||||
// after error)
|
||||
// after error).
|
||||
type stickyErrorReader struct {
|
||||
r io.Reader
|
||||
err error
|
||||
|
@ -142,11 +142,11 @@ func newPart(mr *Reader, rawPart bool) (*Part, error) {
|
|||
return bp, nil
|
||||
}
|
||||
|
||||
func (bp *Part) populateHeaders() error {
|
||||
r := textproto.NewReader(bp.mr.bufReader)
|
||||
func (p *Part) populateHeaders() error {
|
||||
r := textproto.NewReader(p.mr.bufReader)
|
||||
header, err := r.ReadMIMEHeader()
|
||||
if err == nil {
|
||||
bp.Header = header
|
||||
p.Header = header
|
||||
}
|
||||
return err
|
||||
}
|
||||
|
@ -278,7 +278,7 @@ func matchAfterPrefix(buf, prefix []byte, readErr error) int {
|
|||
}
|
||||
|
||||
func (p *Part) Close() error {
|
||||
io.Copy(io.Discard, p)
|
||||
_, _ = io.Copy(io.Discard, p)
|
||||
return nil
|
||||
}
|
||||
|
||||
|
@ -378,37 +378,37 @@ func (r *Reader) nextPart(rawPart bool) (*Part, error) {
|
|||
|
||||
// isFinalBoundary reports whether line is the final boundary line
|
||||
// indicating that all parts are over.
|
||||
// It matches `^--boundary--[ \t]*(\r\n)?$`
|
||||
func (mr *Reader) isFinalBoundary(line []byte) bool {
|
||||
if !bytes.HasPrefix(line, mr.dashBoundaryDash) {
|
||||
// It matches `^--boundary--[ \t]*(\r\n)?$`.
|
||||
func (r *Reader) isFinalBoundary(line []byte) bool {
|
||||
if !bytes.HasPrefix(line, r.dashBoundaryDash) {
|
||||
return false
|
||||
}
|
||||
rest := line[len(mr.dashBoundaryDash):]
|
||||
rest := line[len(r.dashBoundaryDash):]
|
||||
rest = skipLWSPChar(rest)
|
||||
return len(rest) == 0 || bytes.Equal(rest, mr.nl)
|
||||
return len(rest) == 0 || bytes.Equal(rest, r.nl)
|
||||
}
|
||||
|
||||
func (mr *Reader) isBoundaryDelimiterLine(line []byte) (ret bool) {
|
||||
func (r *Reader) isBoundaryDelimiterLine(line []byte) (ret bool) {
|
||||
// https://tools.ietf.org/html/rfc2046#section-5.1
|
||||
// The boundary delimiter line is then defined as a line
|
||||
// consisting entirely of two hyphen characters ("-",
|
||||
// decimal value 45) followed by the boundary parameter
|
||||
// value from the Content-Type header field, optional linear
|
||||
// whitespace, and a terminating CRLF.
|
||||
if !bytes.HasPrefix(line, mr.dashBoundary) {
|
||||
if !bytes.HasPrefix(line, r.dashBoundary) {
|
||||
return false
|
||||
}
|
||||
rest := line[len(mr.dashBoundary):]
|
||||
rest := line[len(r.dashBoundary):]
|
||||
rest = skipLWSPChar(rest)
|
||||
|
||||
// On the first part, see our lines are ending in \n instead of \r\n
|
||||
// and switch into that mode if so. This is a violation of the spec,
|
||||
// but occurs in practice.
|
||||
if mr.partsRead == 0 && len(rest) == 1 && rest[0] == '\n' {
|
||||
mr.nl = mr.nl[1:]
|
||||
mr.nlDashBoundary = mr.nlDashBoundary[1:]
|
||||
if r.partsRead == 0 && len(rest) == 1 && rest[0] == '\n' {
|
||||
r.nl = r.nl[1:]
|
||||
r.nlDashBoundary = r.nlDashBoundary[1:]
|
||||
}
|
||||
return bytes.Equal(rest, mr.nl)
|
||||
return bytes.Equal(rest, r.nl)
|
||||
}
|
||||
|
||||
// skipLWSPChar returns b with leading spaces and tabs removed.
|
||||
|
|
Loading…
Reference in a new issue