Skip to content

Commit b6762e2

Browse files
authored
Fix regression of renderer (#16091)
* Fix regression of renderer * Fix render setting load twice bug
1 parent b3ef6a6 commit b6762e2

File tree

2 files changed

+36
-24
lines changed

2 files changed

+36
-24
lines changed

modules/markup/renderer.go

+34-24
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@ type RenderContext struct {
4848
type Renderer interface {
4949
Name() string // markup format name
5050
Extensions() []string
51+
NeedPostProcess() bool
5152
Render(ctx *RenderContext, input io.Reader, output io.Writer) error
5253
}
5354

@@ -94,7 +95,7 @@ func RenderString(ctx *RenderContext, content string) (string, error) {
9495
return buf.String(), nil
9596
}
9697

97-
func render(ctx *RenderContext, parser Renderer, input io.Reader, output io.Writer) error {
98+
func render(ctx *RenderContext, renderer Renderer, input io.Reader, output io.Writer) error {
9899
var wg sync.WaitGroup
99100
var err error
100101
pr, pw := io.Pipe()
@@ -103,29 +104,38 @@ func render(ctx *RenderContext, parser Renderer, input io.Reader, output io.Writ
103104
_ = pw.Close()
104105
}()
105106

106-
pr2, pw2 := io.Pipe()
107-
defer func() {
108-
_ = pr2.Close()
109-
_ = pw2.Close()
110-
}()
111-
112-
wg.Add(1)
113-
go func() {
114-
buf := SanitizeReader(pr2)
115-
_, err = io.Copy(output, buf)
116-
_ = pr2.Close()
117-
wg.Done()
118-
}()
119-
120-
wg.Add(1)
121-
go func() {
122-
err = PostProcess(ctx, pr, pw2)
123-
_ = pr.Close()
124-
_ = pw2.Close()
125-
wg.Done()
126-
}()
127-
128-
if err1 := parser.Render(ctx, input, pw); err1 != nil {
107+
if renderer.NeedPostProcess() {
108+
pr2, pw2 := io.Pipe()
109+
defer func() {
110+
_ = pr2.Close()
111+
_ = pw2.Close()
112+
}()
113+
114+
wg.Add(1)
115+
go func() {
116+
buf := SanitizeReader(pr2)
117+
_, err = io.Copy(output, buf)
118+
_ = pr2.Close()
119+
wg.Done()
120+
}()
121+
122+
wg.Add(1)
123+
go func() {
124+
err = PostProcess(ctx, pr, pw2)
125+
_ = pr.Close()
126+
_ = pw2.Close()
127+
wg.Done()
128+
}()
129+
} else {
130+
wg.Add(1)
131+
go func() {
132+
buf := SanitizeReader(pr)
133+
_, err = io.Copy(output, buf)
134+
_ = pr.Close()
135+
wg.Done()
136+
}()
137+
}
138+
if err1 := renderer.Render(ctx, input, pw); err1 != nil {
129139
return err1
130140
}
131141
_ = pw.Close()

modules/setting/markup.go

+2
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,8 @@ type MarkupSanitizerRule struct {
3838
}
3939

4040
func newMarkup() {
41+
ExternalMarkupRenderers = make([]MarkupRenderer, 0, 10)
42+
ExternalSanitizerRules = make([]MarkupSanitizerRule, 0, 10)
4143
for _, sec := range Cfg.Section("markup").ChildSections() {
4244
name := strings.TrimPrefix(sec.Name(), "markup.")
4345
if name == "" {

0 commit comments

Comments
 (0)