Fix several panics on invalid input

This commit is contained in:
Craig 2016-02-12 01:26:50 +00:00
parent c33eb5f9c8
commit 7363d03b27
2 changed files with 19 additions and 3 deletions

View file

@ -7,7 +7,7 @@ import (
func parseAddress(src string) (string, error) {
if src[0] != '<' || src[len(src)-1] != '>' {
if len(src) == 0 || src[0] != '<' || src[len(src)-1] != '>' {
return "", fmt.Errorf("Ill-formatted e-mail address: %s", src)
}

View file

@ -166,14 +166,18 @@ func (session *session) handleEHLO(cmd command) {
}
func (session *session) handleMAIL(cmd command) {
if len(cmd.params) != 2 || strings.ToUpper(cmd.params[0]) != "FROM" {
session.reply(502, "Syntax error")
return
}
if session.peer.HeloName == "" {
session.reply(502, "Please introduce yourself first.")
session.reply(502, "Please introduce yourself first")
return
}
if !session.tls && session.server.ForceTLS {
session.reply(502, "Please turn on TLS by issuing a STARTTLS command.")
session.reply(502, "Please turn on TLS by issuing a STARTTLS command")
return
}
@ -208,6 +212,10 @@ func (session *session) handleMAIL(cmd command) {
}
func (session *session) handleRCPT(cmd command) {
if len(cmd.params) != 2 || strings.ToUpper(cmd.params[0]) != "TO" {
session.reply(502, "Syntax error")
return
}
if session.envelope == nil {
session.reply(502, "Missing MAIL FROM command.")
@ -361,6 +369,10 @@ func (session *session) handleQUIT(cmd command) {
}
func (session *session) handleAUTH(cmd command) {
if len(cmd.fields) < 2 {
session.reply(502, "Invalid syntax.")
return
}
if session.server.Authenticator == nil {
session.reply(502, "AUTH not supported.")
@ -467,6 +479,10 @@ func (session *session) handleAUTH(cmd command) {
}
func (session *session) handleXCLIENT(cmd command) {
if len(cmd.fields) < 2 {
session.reply(502, "Invalid syntax.")
return
}
if !session.server.EnableXCLIENT {
session.reply(550, "XCLIENT not enabled")