Skip to content

panic: runtime error: invalid memory address or nil pointer dereference #4895

Closed
@helperShang

Description

@helperShang

tinygo version

tinygo version 0.37.0 darwin/arm64 (using go version go1.24.3 and LLVM version 19.1.2)

source code

package main

import (
	"fmt"
	"io"

	"github.com/alecthomas/chroma/v2"
	"github.com/alecthomas/chroma/v2/formatters/html"
	"github.com/alecthomas/chroma/v2/lexers"
	"github.com/alecthomas/chroma/v2/styles"
	"github.com/gomarkdown/markdown"
	"github.com/gomarkdown/markdown/ast"
	mdhtml "github.com/gomarkdown/markdown/html"
)

func htmlHighlight(w io.Writer, source, lang, defaultLang string) error {
	if lang == "" {
		lang = defaultLang
	}
	l := lexers.Get(lang)
	if l == nil {
		l = lexers.Analyse(source)
	}
	if l == nil {
		l = lexers.Fallback
	}
	l = chroma.Coalesce(l)

	it, err := l.Tokenise(nil, source)
	if err != nil {
		return err
	}
	htmlFormatter := html.New(html.WithClasses(true), html.TabWidth(2))
	if htmlFormatter == nil {
		panic("couldn't create html formatter")
	}
	styleName := "monokailight"
	highlightStyle := styles.Get(styleName)
	if highlightStyle == nil {
		panic(fmt.Sprintf("didn't find style '%s'", styleName))
	}
	return htmlFormatter.Format(w, highlightStyle, it)
}

// an actual rendering of Paragraph is more complicated
func renderCode(w io.Writer, codeBlock *ast.CodeBlock, entering bool) {
	defaultLang := ""
	lang := string(codeBlock.Info)
	htmlHighlight(w, string(codeBlock.Literal), lang, defaultLang)
}

func myRenderHook(w io.Writer, node ast.Node, entering bool) (ast.WalkStatus, bool) {
	if code, ok := node.(*ast.CodeBlock); ok {
		renderCode(w, code, entering)
		return ast.GoToNext, true
	}
	return ast.GoToNext, false
}

func newCustomizedRender() *mdhtml.Renderer {
	opts := mdhtml.RendererOptions{
		Flags:          mdhtml.CommonFlags,
		RenderNodeHook: myRenderHook,
	}
	return mdhtml.NewRenderer(opts)
}

func main() {
	markdown.ToHTML([]byte(`# asfasdfs`), nil, newCustomizedRender())
}

build

tinygo build -target wasm -x

out

panic: runtime error: invalid memory address or nil pointer dereference
[signal SIGSEGV: segmentation violation code=0x2 addr=0x38 pc=0x102432e30]

goroutine 241 [running]:
github.com/tinygo-org/tinygo/interp.(*runner).run(0x14006a6b4a0, 0x140027a2870, {0x140088a8290, 0x6, 0x1400887fa28?}, 0x1400393ecf0, {0x1400846d2c0, 0x28})
        /Users/runner/work/tinygo/tinygo/interp/interpreter.go:369 +0x3470
github.com/tinygo-org/tinygo/interp.(*runner).run(0x14006a6b4a0, 0x140027a27d0, {0x1400889b390, 0x2, 0x1400887eb28?}, 0x140039113b0, {0x1400846d1d0, 0x24})
        /Users/runner/work/tinygo/tinygo/interp/interpreter.go:560 +0x669c
github.com/tinygo-org/tinygo/interp.(*runner).run(0x14006a6b4a0, 0x140027a2780, {0x1400888bc10, 0x3, 0x1400887e408?}, 0x1400367fb00, {0x140088969c0, 0x20})
        /Users/runner/work/tinygo/tinygo/interp/interpreter.go:560 +0x669c
github.com/tinygo-org/tinygo/interp.(*runner).run(0x14006a6b4a0, 0x140027a26e0, {0x1400887d790, 0x2, 0x14008665bf0?}, 0x140035d3410, {0x14008896400, 0x1c})
        /Users/runner/work/tinygo/tinygo/interp/interpreter.go:560 +0x669c
github.com/tinygo-org/tinygo/interp.(*runner).run(0x14006a6b4a0, 0x140027a2690, {0x14008804290, 0x2, 0x140086644f8?}, 0x14003580990, {0x14008833758, 0x18})
        /Users/runner/work/tinygo/tinygo/interp/interpreter.go:560 +0x669c
github.com/tinygo-org/tinygo/interp.(*runner).run(0x14006a6b4a0, 0x140027a2500, {0x1400875ab10, 0x2, 0x14008746930?}, 0x14002a44600, {0x14008629800, 0x14})
        /Users/runner/work/tinygo/tinygo/interp/interpreter.go:560 +0x669c
github.com/tinygo-org/tinygo/interp.(*runner).run(0x14006a6b4a0, 0x14003787180, {0x14008749310, 0x5, 0x10855fbc0?}, 0x140018d4780, {0x14008758c50, 0x10})
        /Users/runner/work/tinygo/tinygo/interp/interpreter.go:560 +0x669c
github.com/tinygo-org/tinygo/interp.(*runner).run(0x14006a6b4a0, 0x14003787130, {0x14007d1ea10, 0x5, 0x10855fbc0?}, 0x140048671a0, {0x14008743090, 0xc})
        /Users/runner/work/tinygo/tinygo/interp/interpreter.go:560 +0x669c
github.com/tinygo-org/tinygo/interp.(*runner).run(0x14006a6b4a0, 0x14003787040, {0x14007d1e810, 0x5, 0x10855fbc0?}, 0x14004df83f0, {0x1400873aa68, 0x8})
        /Users/runner/work/tinygo/tinygo/interp/interpreter.go:560 +0x669c
github.com/tinygo-org/tinygo/interp.(*runner).run(0x14006a6b4a0, 0x1400378b4a0, {0x0, 0x0, 0x140000839a8?}, 0x0, {0x106c550b3, 0x4})
        /Users/runner/work/tinygo/tinygo/interp/interpreter.go:560 +0x669c
github.com/tinygo-org/tinygo/interp.Run({0x14000083dd8?}, 0x1024974f8?, 0xf0?)
        /Users/runner/work/tinygo/tinygo/interp/interp.go:121 +0x558
github.com/tinygo-org/tinygo/builder.optimizeProgram({0x1180a3f60?}, 0x140002a4000)
        /Users/runner/work/tinygo/tinygo/builder/build.go:1180 +0x30
github.com/tinygo-org/tinygo/builder.Build.func5(0x14005e294a0?)
        /Users/runner/work/tinygo/tinygo/builder/build.go:611 +0x504
github.com/tinygo-org/tinygo/builder.runJob(0x14005e29500, 0x14000113b20)
        /Users/runner/work/tinygo/tinygo/builder/jobs.go:212 +0x48
created by github.com/tinygo-org/tinygo/builder.runJobs in goroutine 1
        /Users/runner/work/tinygo/tinygo/builder/jobs.go:113 +0x45c

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions