mirror of
https://github.com/yuin/goldmark
synced 2025-03-04 23:04:52 +00:00
fix: panic on invalid NodeRenderer in renderer
Uses the previously ignored type check ok value with a similar structure to parse.go for the With* functional options. Changes: runtime error: invalid memory address or nil pointer dereference to: <TypeName> is not a NodeRenderer
This commit is contained in:
parent
6c741ae251
commit
cbb021173c
2 changed files with 33 additions and 1 deletions
|
|
@ -3,6 +3,7 @@ package renderer
|
|||
|
||||
import (
|
||||
"bufio"
|
||||
"fmt"
|
||||
"io"
|
||||
"sync"
|
||||
|
||||
|
|
@ -139,7 +140,10 @@ func (r *renderer) Render(w io.Writer, source []byte, n ast.Node) error {
|
|||
l := len(r.config.NodeRenderers)
|
||||
for i := l - 1; i >= 0; i-- {
|
||||
v := r.config.NodeRenderers[i]
|
||||
nr, _ := v.Value.(NodeRenderer)
|
||||
nr, ok := v.Value.(NodeRenderer)
|
||||
if !ok {
|
||||
panic(fmt.Errorf("%T is not a NodeRenderer", v.Value))
|
||||
}
|
||||
if se, ok := v.Value.(SetOptioner); ok {
|
||||
for oname, ovalue := range r.options {
|
||||
se.SetOption(oname, ovalue)
|
||||
|
|
|
|||
28
renderer/renderer_test.go
Normal file
28
renderer/renderer_test.go
Normal file
|
|
@ -0,0 +1,28 @@
|
|||
package renderer_test
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"github.com/yuin/goldmark/renderer"
|
||||
"github.com/yuin/goldmark/util"
|
||||
)
|
||||
|
||||
type invalid struct{}
|
||||
|
||||
func TestInvalidNodeRenderer(t *testing.T) {
|
||||
defer func() {
|
||||
r := recover()
|
||||
if r == nil {
|
||||
t.Errorf("did not panic")
|
||||
return
|
||||
}
|
||||
|
||||
rerr := r.(error)
|
||||
if rerr.Error() != "*renderer_test.invalid is not a NodeRenderer" {
|
||||
t.Errorf("unexpected panic caught: %v", rerr)
|
||||
}
|
||||
}()
|
||||
|
||||
r := renderer.NewRenderer(renderer.WithNodeRenderers(util.Prioritized(&invalid{}, 1000)))
|
||||
r.Render(nil, nil, nil)
|
||||
}
|
||||
Loading…
Reference in a new issue