Handle CRLF

This commit is contained in:
Kay Lukas 2018-09-05 19:53:27 +02:00
parent 81e4a3cb2c
commit 07b3a2c739

View file

@ -45,6 +45,7 @@ func getRawMimePart(rawdata io.Reader, boundary string) (io.Reader, io.Reader) {
break break
} }
} }
lineEndingLength := 0
for { for {
line, isPrefix, err := reader.ReadLine() line, isPrefix, err := reader.ReadLine()
if err != nil { if err != nil {
@ -53,20 +54,23 @@ func getRawMimePart(rawdata io.Reader, boundary string) (io.Reader, io.Reader) {
if bytes.HasPrefix(line, byteBoundary) { if bytes.HasPrefix(line, byteBoundary) {
break break
} }
lineEndingLength = 0
bodyBuffer.Write(line) bodyBuffer.Write(line)
if !isPrefix { if !isPrefix {
reader.UnreadByte() reader.UnreadByte()
reader.UnreadByte() reader.UnreadByte()
token, _ := reader.ReadByte() token, _ := reader.ReadByte()
if token == '\r' { if token == '\r' {
lineEndingLength++
bodyBuffer.WriteByte(token) bodyBuffer.WriteByte(token)
} }
lineEndingLength++
bodyBuffer.WriteByte(token) bodyBuffer.WriteByte(token)
} }
} }
ioutil.ReadAll(reader) ioutil.ReadAll(reader)
data := bodyBuffer.Bytes() data := bodyBuffer.Bytes()
return tee, bytes.NewReader(data[0:len(data) - 1]) return tee, bytes.NewReader(data[0:len(data) - lineEndingLength])
} }
func getMultipartParts(r io.Reader, params map[string]string) (parts []io.Reader, headers []textproto.MIMEHeader, err error) { func getMultipartParts(r io.Reader, params map[string]string) (parts []io.Reader, headers []textproto.MIMEHeader, err error) {