From 9b6c835715ab27aa7a008a51415f38ca2a856cd0 Mon Sep 17 00:00:00 2001
From: Unknwon <u@gogs.io>
Date: Fri, 20 Nov 2015 01:52:11 -0500
Subject: [PATCH] fix #1873

---
 modules/base/markdown.go | 11 +++++++++++
 1 file changed, 11 insertions(+)

diff --git a/modules/base/markdown.go b/modules/base/markdown.go
index 1f48b88db7..d55e98dd54 100644
--- a/modules/base/markdown.go
+++ b/modules/base/markdown.go
@@ -231,9 +231,15 @@ func RenderRawMarkdown(body []byte, urlPrefix string) []byte {
 	return body
 }
 
+var (
+	leftAngleBracket  = []byte("</")
+	rightAngleBracket = []byte(">")
+)
+
 // PostProcessMarkdown treats different types of HTML differently,
 // and only renders special links for plain text blocks.
 func PostProcessMarkdown(rawHtml []byte, urlPrefix string) []byte {
+	var startTag string
 	var buf bytes.Buffer
 	tokenizer := html.NewTokenizer(bytes.NewReader(rawHtml))
 	for html.ErrorToken != tokenizer.Next() {
@@ -243,6 +249,7 @@ func PostProcessMarkdown(rawHtml []byte, urlPrefix string) []byte {
 			buf.Write(RenderSpecialLink([]byte(token.String()), urlPrefix))
 
 		case html.StartTagToken:
+			startTag = token.Data
 			buf.WriteString(token.String())
 			tagName := token.Data
 			// If this is an excluded tag, we skip processing all output until a close tag is encountered.
@@ -258,6 +265,10 @@ func PostProcessMarkdown(rawHtml []byte, urlPrefix string) []byte {
 				}
 			}
 
+		case html.EndTagToken:
+			buf.Write(leftAngleBracket)
+			buf.WriteString(startTag)
+			buf.Write(rightAngleBracket)
 		default:
 			buf.WriteString(token.String())
 		}