7
7
"fmt"
8
8
"regexp"
9
9
"strings"
10
+ "sync"
10
11
11
12
"code.gitea.io/gitea/modules/container"
12
13
"code.gitea.io/gitea/modules/markup"
@@ -112,13 +113,16 @@ func (g *ASTTransformer) Transform(node *ast.Document, reader text.Reader, pc pa
112
113
}
113
114
}
114
115
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.
117
122
func NewHTMLRenderer (renderInternal * internal.RenderInternal , opts ... html.Option ) renderer.NodeRenderer {
118
123
r := & HTMLRenderer {
119
124
renderInternal : renderInternal ,
120
125
Config : html .NewConfig (),
121
- reValidName : regexp .MustCompile ("^[a-z ]+$" ),
122
126
}
123
127
for _ , opt := range opts {
124
128
opt .SetHTMLOption (& r .Config )
@@ -130,7 +134,6 @@ func NewHTMLRenderer(renderInternal *internal.RenderInternal, opts ...html.Optio
130
134
// renders gitea specific features.
131
135
type HTMLRenderer struct {
132
136
html.Config
133
- reValidName * regexp.Regexp
134
137
renderInternal * internal.RenderInternal
135
138
}
136
139
@@ -219,7 +222,7 @@ func (r *HTMLRenderer) renderIcon(w util.BufWriter, source []byte, node ast.Node
219
222
return ast .WalkContinue , nil
220
223
}
221
224
222
- if ! r . reValidName .MatchString (name ) {
225
+ if ! reValidIconName () .MatchString (name ) {
223
226
// skip this
224
227
return ast .WalkContinue , nil
225
228
}
0 commit comments