Fix bugs in header parsing

This commit is contained in:
Ian Kent 2014-04-26 12:16:57 +01:00
parent 73088ab400
commit 05b50913c1
2 changed files with 44 additions and 25 deletions

View file

@ -117,24 +117,35 @@ func PathFromString(path string) *Path {
func ContentFromString(data string) *Content { func ContentFromString(data string) *Content {
log.Printf("Parsing Content from string: '%s'", data) log.Printf("Parsing Content from string: '%s'", data)
x := strings.SplitN(data, "\r\n\r\n", 2) x := strings.SplitN(data, "\r\n\r\n", 2)
headers, body := x[0], x[1]
h := make(map[string][]string, 0) h := make(map[string][]string, 0)
if len(x) == 2 {
headers, body := x[0], x[1]
hdrs := strings.Split(headers, "\r\n") hdrs := strings.Split(headers, "\r\n")
var lastHdr = ""
for _, hdr := range hdrs { for _, hdr := range hdrs {
if(strings.Contains(hdr, ": ")) { if lastHdr != "" && strings.HasPrefix(hdr, " ") {
h[lastHdr][len(h[lastHdr])-1] = h[lastHdr][len(h[lastHdr])-1] + hdr
} else if strings.Contains(hdr, ": ") {
y := strings.SplitN(hdr, ": ", 2) y := strings.SplitN(hdr, ": ", 2)
key, value := y[0], y[1] key, value := y[0], y[1]
// TODO multiple header fields // TODO multiple header fields
h[key] = []string{value} h[key] = []string{value}
lastHdr = key
} else { } else {
log.Printf("Found invalid header: '%s'", hdr) log.Printf("Found invalid header: '%s'", hdr)
} }
} }
return &Content{ return &Content{
Size: len(data), Size: len(data),
Headers: h, Headers: h,
Body: body, Body: body,
} }
} else {
return &Content{
Size: len(data),
Headers: h,
Body: x[0],
}
}
} }

View file

@ -33,12 +33,16 @@ mailhogApp.controller('MailCtrl', function ($scope, $http, $sce) {
if(message.MIME) { if(message.MIME) {
for(var p in message.MIME.Parts) { for(var p in message.MIME.Parts) {
if(message.MIME.Parts[p].Headers["Content-Type"][0] == "text/plain") { if("Content-Type" in message.MIME.Parts[p].Headers) {
if(message.MIME.Parts[p].Headers["Content-Type"].length > 0) {
if(message.MIME.Parts[p].Headers["Content-Type"][0].match(/text\/plain;?.*/)) {
part = message.MIME.Parts[p]; part = message.MIME.Parts[p];
break; break;
} }
} }
} }
}
}
if(!part) part = message.Content; if(!part) part = message.Content;
@ -49,12 +53,16 @@ mailhogApp.controller('MailCtrl', function ($scope, $http, $sce) {
if(message.MIME) { if(message.MIME) {
for(var p in message.MIME.Parts) { for(var p in message.MIME.Parts) {
if(message.MIME.Parts[p].Headers["Content-Type"][0] == "text/html") { if("Content-Type" in message.MIME.Parts[p].Headers) {
if(message.MIME.Parts[p].Headers["Content-Type"].length > 0) {
if(message.MIME.Parts[p].Headers["Content-Type"][0].match(/text\/html;?.*/)) {
part = message.MIME.Parts[p]; part = message.MIME.Parts[p];
break; break;
} }
} }
} }
}
}
if(!part) part = message.Content; if(!part) part = message.Content;