77	"fmt" 
88	"regexp" 
99	"strings" 
10+ 	"sync" 
1011
1112	"code.gitea.io/gitea/modules/container" 
1213	"code.gitea.io/gitea/modules/markup" 
@@ -112,13 +113,16 @@ func (g *ASTTransformer) Transform(node *ast.Document, reader text.Reader, pc pa
112113	}
113114}
114115
115- // NewHTMLRenderer creates a HTMLRenderer to render 
116- // in the gitea form. 
116+ // it is copied from old code, which is quite doubtful whether it is correct 
117+ var  reValidIconName  =  sync.OnceValue [* regexp.Regexp ](func () * regexp.Regexp  {
118+ 	return  regexp .MustCompile (`^[-\w]+$` ) // old: regexp.MustCompile("^[a-z ]+$") 
119+ })
120+ 
121+ // NewHTMLRenderer creates a HTMLRenderer to render in the gitea form. 
117122func  NewHTMLRenderer (renderInternal  * internal.RenderInternal , opts  ... html.Option ) renderer.NodeRenderer  {
118123	r  :=  & HTMLRenderer {
119124		renderInternal : renderInternal ,
120125		Config :         html .NewConfig (),
121- 		reValidName :    regexp .MustCompile ("^[a-z ]+$" ),
122126	}
123127	for  _ , opt  :=  range  opts  {
124128		opt .SetHTMLOption (& r .Config )
@@ -130,7 +134,6 @@ func NewHTMLRenderer(renderInternal *internal.RenderInternal, opts ...html.Optio
130134// renders gitea specific features. 
131135type  HTMLRenderer  struct  {
132136	html.Config 
133- 	reValidName     * regexp.Regexp 
134137	renderInternal  * internal.RenderInternal 
135138}
136139
@@ -219,7 +222,7 @@ func (r *HTMLRenderer) renderIcon(w util.BufWriter, source []byte, node ast.Node
219222		return  ast .WalkContinue , nil 
220223	}
221224
222- 	if  ! r . reValidName .MatchString (name ) {
225+ 	if  ! reValidIconName () .MatchString (name ) {
223226		// skip this 
224227		return  ast .WalkContinue , nil 
225228	}
0 commit comments