Skip to content

Commit

Permalink
Fix regression of renderer (go-gitea#16091)
Browse files Browse the repository at this point in the history
* Fix regression of renderer

* Fix render setting load twice bug
  • Loading branch information
lunny authored and AbdulrhmnGhanem committed Aug 10, 2021
1 parent b26f37f commit ec28ac3
Show file tree
Hide file tree
Showing 2 changed files with 36 additions and 24 deletions.
58 changes: 34 additions & 24 deletions modules/markup/renderer.go
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,7 @@ type RenderContext struct {
type Renderer interface {
Name() string // markup format name
Extensions() []string
NeedPostProcess() bool
Render(ctx *RenderContext, input io.Reader, output io.Writer) error
}

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

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

pr2, pw2 := io.Pipe()
defer func() {
_ = pr2.Close()
_ = pw2.Close()
}()

wg.Add(1)
go func() {
buf := SanitizeReader(pr2)
_, err = io.Copy(output, buf)
_ = pr2.Close()
wg.Done()
}()

wg.Add(1)
go func() {
err = PostProcess(ctx, pr, pw2)
_ = pr.Close()
_ = pw2.Close()
wg.Done()
}()

if err1 := parser.Render(ctx, input, pw); err1 != nil {
if renderer.NeedPostProcess() {
pr2, pw2 := io.Pipe()
defer func() {
_ = pr2.Close()
_ = pw2.Close()
}()

wg.Add(1)
go func() {
buf := SanitizeReader(pr2)
_, err = io.Copy(output, buf)
_ = pr2.Close()
wg.Done()
}()

wg.Add(1)
go func() {
err = PostProcess(ctx, pr, pw2)
_ = pr.Close()
_ = pw2.Close()
wg.Done()
}()
} else {
wg.Add(1)
go func() {
buf := SanitizeReader(pr)
_, err = io.Copy(output, buf)
_ = pr.Close()
wg.Done()
}()
}
if err1 := renderer.Render(ctx, input, pw); err1 != nil {
return err1
}
_ = pw.Close()
Expand Down
2 changes: 2 additions & 0 deletions modules/setting/markup.go
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,8 @@ type MarkupSanitizerRule struct {
}

func newMarkup() {
ExternalMarkupRenderers = make([]MarkupRenderer, 0, 10)
ExternalSanitizerRules = make([]MarkupSanitizerRule, 0, 10)
for _, sec := range Cfg.Section("markup").ChildSections() {
name := strings.TrimPrefix(sec.Name(), "markup.")
if name == "" {
Expand Down

0 comments on commit ec28ac3

Please sign in to comment.