1
0
mirror of https://github.com/jhillyerd/inbucket.git synced 2025-12-18 10:07:02 +00:00

Completed ParseEmailAddress()

This commit is contained in:
James Hillyerd
2013-11-04 17:02:17 -08:00
parent 193a5f6f13
commit 596b268380
2 changed files with 47 additions and 0 deletions

View File

@@ -123,9 +123,11 @@ LOOP:
inCharQuote = false
case '0' <= c && c <= '9':
// Numbers are OK
buf.WriteByte(c)
inCharQuote = false
case bytes.IndexByte([]byte("!#$%&'*+-/=?^_`{|}~"), c) >= 0:
// These specials can be used unquoted
buf.WriteByte(c)
inCharQuote = false
case c == '.':
// A single period is OK
@@ -133,10 +135,13 @@ LOOP:
// Sequence of periods is not permitted
return "", "", fmt.Errorf("Sequence of periods is not permitted")
}
buf.WriteByte(c)
inCharQuote = false
case c == '\\':
inCharQuote = true
case c == '"':
if inCharQuote {
buf.WriteByte(c)
inCharQuote = false
} else if inStringQuote {
inStringQuote = false
@@ -149,6 +154,7 @@ LOOP:
}
case c == '@':
if inCharQuote || inStringQuote {
buf.WriteByte(c)
inCharQuote = false
} else {
// End of local-part
@@ -165,6 +171,7 @@ LOOP:
return "", "", fmt.Errorf("Characters outside of US-ASCII range not permitted")
default:
if inCharQuote || inStringQuote {
buf.WriteByte(c)
inCharQuote = false
} else {
return "", "", fmt.Errorf("Character %q must be quoted", c)