mirror of
				https://gitee.com/gitea/gitea
				synced 2025-11-04 08:30:25 +08:00 
			
		
		
		
	Fix regression of renderer (#16091)
* Fix regression of renderer * Fix render setting load twice bug
This commit is contained in:
		@@ -48,6 +48,7 @@ type RenderContext struct {
 | 
				
			|||||||
type Renderer interface {
 | 
					type Renderer interface {
 | 
				
			||||||
	Name() string // markup format name
 | 
						Name() string // markup format name
 | 
				
			||||||
	Extensions() []string
 | 
						Extensions() []string
 | 
				
			||||||
 | 
						NeedPostProcess() bool
 | 
				
			||||||
	Render(ctx *RenderContext, input io.Reader, output io.Writer) error
 | 
						Render(ctx *RenderContext, input io.Reader, output io.Writer) error
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -94,7 +95,7 @@ func RenderString(ctx *RenderContext, content string) (string, error) {
 | 
				
			|||||||
	return buf.String(), nil
 | 
						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 wg sync.WaitGroup
 | 
				
			||||||
	var err error
 | 
						var err error
 | 
				
			||||||
	pr, pw := io.Pipe()
 | 
						pr, pw := io.Pipe()
 | 
				
			||||||
@@ -103,29 +104,38 @@ func render(ctx *RenderContext, parser Renderer, input io.Reader, output io.Writ
 | 
				
			|||||||
		_ = pw.Close()
 | 
							_ = pw.Close()
 | 
				
			||||||
	}()
 | 
						}()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	pr2, pw2 := io.Pipe()
 | 
						if renderer.NeedPostProcess() {
 | 
				
			||||||
	defer func() {
 | 
							pr2, pw2 := io.Pipe()
 | 
				
			||||||
		_ = pr2.Close()
 | 
							defer func() {
 | 
				
			||||||
		_ = pw2.Close()
 | 
								_ = pr2.Close()
 | 
				
			||||||
	}()
 | 
								_ = pw2.Close()
 | 
				
			||||||
 | 
							}()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	wg.Add(1)
 | 
							wg.Add(1)
 | 
				
			||||||
	go func() {
 | 
							go func() {
 | 
				
			||||||
		buf := SanitizeReader(pr2)
 | 
								buf := SanitizeReader(pr2)
 | 
				
			||||||
		_, err = io.Copy(output, buf)
 | 
								_, err = io.Copy(output, buf)
 | 
				
			||||||
		_ = pr2.Close()
 | 
								_ = pr2.Close()
 | 
				
			||||||
		wg.Done()
 | 
								wg.Done()
 | 
				
			||||||
	}()
 | 
							}()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	wg.Add(1)
 | 
							wg.Add(1)
 | 
				
			||||||
	go func() {
 | 
							go func() {
 | 
				
			||||||
		err = PostProcess(ctx, pr, pw2)
 | 
								err = PostProcess(ctx, pr, pw2)
 | 
				
			||||||
		_ = pr.Close()
 | 
								_ = pr.Close()
 | 
				
			||||||
		_ = pw2.Close()
 | 
								_ = pw2.Close()
 | 
				
			||||||
		wg.Done()
 | 
								wg.Done()
 | 
				
			||||||
	}()
 | 
							}()
 | 
				
			||||||
 | 
						} else {
 | 
				
			||||||
	if err1 := parser.Render(ctx, input, pw); err1 != nil {
 | 
							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
 | 
							return err1
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	_ = pw.Close()
 | 
						_ = pw.Close()
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -38,6 +38,8 @@ type MarkupSanitizerRule struct {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func newMarkup() {
 | 
					func newMarkup() {
 | 
				
			||||||
 | 
						ExternalMarkupRenderers = make([]MarkupRenderer, 0, 10)
 | 
				
			||||||
 | 
						ExternalSanitizerRules = make([]MarkupSanitizerRule, 0, 10)
 | 
				
			||||||
	for _, sec := range Cfg.Section("markup").ChildSections() {
 | 
						for _, sec := range Cfg.Section("markup").ChildSections() {
 | 
				
			||||||
		name := strings.TrimPrefix(sec.Name(), "markup.")
 | 
							name := strings.TrimPrefix(sec.Name(), "markup.")
 | 
				
			||||||
		if name == "" {
 | 
							if name == "" {
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user