Backport #27987 by @yardenshoham Added the following characters to the regular expression for the email: - , - ; - ? - ! Also added a test case. - Fixes #27616 # Before ![image](https://github.com/go-gitea/gitea/assets/20454870/c57eac26-f281-43ef-a51d-9c9a81b63efa) # After ![image](https://github.com/go-gitea/gitea/assets/20454870/fc7d5c08-4350-4af0-a7f0-d1444d2d75af) Signed-off-by: Yarden Shoham <git@yardenshoham.com> Co-authored-by: Yarden Shoham <git@yardenshoham.com>tags/v1.20.6
@@ -66,7 +66,7 @@ var ( | |||
// well as the HTML5 spec: | |||
// http://spec.commonmark.org/0.28/#email-address | |||
// https://html.spec.whatwg.org/multipage/input.html#e-mail-state-(type%3Demail) | |||
emailRegex = regexp.MustCompile("(?:\\s|^|\\(|\\[)([a-zA-Z0-9.!#$%&'*+\\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9]{2,}(?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+)(?:\\s|$|\\)|\\]|\\.(\\s|$))") | |||
emailRegex = regexp.MustCompile("(?:\\s|^|\\(|\\[)([a-zA-Z0-9.!#$%&'*+\\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9]{2,}(?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+)(?:\\s|$|\\)|\\]|;|,|\\?|!|\\.(\\s|$))") | |||
// blackfriday extensions create IDs like fn:user-content-footnote | |||
blackfridayExtRegex = regexp.MustCompile(`[^:]*:user-content-`) |
@@ -264,6 +264,18 @@ func TestRender_email(t *testing.T) { | |||
"send email to info@gitea.co.uk.", | |||
`<p>send email to <a href="mailto:info@gitea.co.uk" rel="nofollow">info@gitea.co.uk</a>.</p>`) | |||
test( | |||
`j.doe@example.com, | |||
j.doe@example.com. | |||
j.doe@example.com; | |||
j.doe@example.com? | |||
j.doe@example.com!`, | |||
`<p><a href="mailto:j.doe@example.com" rel="nofollow">j.doe@example.com</a>,<br/> | |||
<a href="mailto:j.doe@example.com" rel="nofollow">j.doe@example.com</a>.<br/> | |||
<a href="mailto:j.doe@example.com" rel="nofollow">j.doe@example.com</a>;<br/> | |||
<a href="mailto:j.doe@example.com" rel="nofollow">j.doe@example.com</a>?<br/> | |||
<a href="mailto:j.doe@example.com" rel="nofollow">j.doe@example.com</a>!</p>`) | |||
// Test that should *not* be turned into email links | |||
test( | |||
"\"info@gitea.com\"", |