Skip to content

Commit 9862936

Browse files
balanceofcowardsAndreas Fischer6543zeripathtechknowlogick
authored
Make e-mail sanity check more precise (#20991)
For security reasons, all e-mail addresses starting with non-alphanumeric characters were rejected. This is too broad and rejects perfectly valid e-mail addresses. Only leading hyphens should be rejected -- in all other cases e-mail address specification should follow RFC 5322. Co-authored-by: Andreas Fischer <[email protected]> Co-authored-by: 6543 <[email protected]> Co-authored-by: zeripath <[email protected]> Co-authored-by: techknowlogick <[email protected]>
1 parent b5a54f0 commit 9862936

File tree

2 files changed

+21
-20
lines changed

2 files changed

+21
-20
lines changed

models/user/email_address.go

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ func (err ErrEmailCharIsNotSupported) Error() string {
4141
}
4242

4343
// ErrEmailInvalid represents an error where the email address does not comply with RFC 5322
44+
// or has a leading '-' character
4445
type ErrEmailInvalid struct {
4546
Email string
4647
}
@@ -134,9 +135,7 @@ func ValidateEmail(email string) error {
134135
return ErrEmailCharIsNotSupported{email}
135136
}
136137

137-
if !(email[0] >= 'a' && email[0] <= 'z') &&
138-
!(email[0] >= 'A' && email[0] <= 'Z') &&
139-
!(email[0] >= '0' && email[0] <= '9') {
138+
if email[0] == '-' {
140139
return ErrEmailInvalid{email}
141140
}
142141

models/user/email_address_test.go

Lines changed: 19 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -281,23 +281,25 @@ func TestEmailAddressValidate(t *testing.T) {
281281
282282
`first;[email protected]`: user_model.ErrEmailCharIsNotSupported{`first;[email protected]`},
283283
"[email protected]": user_model.ErrEmailInvalid{"[email protected]"},
284-
"[email protected]": user_model.ErrEmailInvalid{"[email protected]"},
285-
"#[email protected]": user_model.ErrEmailInvalid{"#[email protected]"},
286-
"[email protected]": user_model.ErrEmailInvalid{"[email protected]"},
287-
"%[email protected]": user_model.ErrEmailInvalid{"%[email protected]"},
288-
"&[email protected]": user_model.ErrEmailInvalid{"&[email protected]"},
289-
"'[email protected]": user_model.ErrEmailInvalid{"'[email protected]"},
290-
"*[email protected]": user_model.ErrEmailInvalid{"*[email protected]"},
291-
"[email protected]": user_model.ErrEmailInvalid{"[email protected]"},
292-
"/[email protected]": user_model.ErrEmailInvalid{"/[email protected]"},
293-
"[email protected]": user_model.ErrEmailInvalid{"[email protected]"},
294-
"[email protected]": user_model.ErrEmailInvalid{"[email protected]"},
295-
"^[email protected]": user_model.ErrEmailInvalid{"^[email protected]"},
296-
"`[email protected]": user_model.ErrEmailInvalid{"`[email protected]"},
297-
"{[email protected]": user_model.ErrEmailInvalid{"{[email protected]"},
298-
"|[email protected]": user_model.ErrEmailInvalid{"|[email protected]"},
299-
"}[email protected]": user_model.ErrEmailInvalid{"}[email protected]"},
300-
"[email protected]": user_model.ErrEmailInvalid{"[email protected]"},
284+
285+
286+
287+
288+
289+
290+
291+
292+
"[email protected]": user_model.ErrEmailInvalid{"[email protected]"},
293+
294+
295+
296+
297+
298+
299+
300+
301+
302+
301303
";[email protected]": user_model.ErrEmailCharIsNotSupported{";[email protected]"},
302304
"Foo <[email protected]>": user_model.ErrEmailCharIsNotSupported{"Foo <[email protected]>"},
303305
string([]byte{0xE2, 0x84, 0xAA}): user_model.ErrEmailCharIsNotSupported{string([]byte{0xE2, 0x84, 0xAA})},

0 commit comments

Comments
 (0)