fyne-io / fyne

Cross platform GUI toolkit in Go inspired by Material Design
https://fyne.io/
Other
24.77k stars 1.37k forks source link

Running the Widget demo causes a panic #5156

Open xmengnet opened 1 week ago

xmengnet commented 1 week ago

Checklist

Describe the bug

Running the Widget demo on the home page generates a panic

$ go install fyne.io/fyne/v2/cmd/fyne_demo@latest
$ ~/go/bin/fyne_demo

panic: runtime error: slice bounds out of range [:73420] with capacity 73419

goroutine 1 [running, locked to thread]:
github.com/go-text/typesetting/opentype/tables.ParseGlyf({0xc000ca4000, 0x304?, 0x11ecb}, {0xc000bc8000, 0x182, 0x0?})
        /home/user/go/pkg/mod/github.com/go-text/typesetting@v0.1.0/opentype/tables/glyphs_glyf_src.go:50 +0x211
github.com/go-text/typesetting/opentype/api/font.NewFont(0xc00033d1a0)
        /home/user/go/pkg/mod/github.com/go-text/typesetting@v0.1.0/opentype/api/font/font.go:137 +0x68b
github.com/go-text/typesetting/font.ParseTTC({0xe51758?, 0xc0001a9288?})
        /home/user/go/pkg/mod/github.com/go-text/typesetting@v0.1.0/font/font.go:47 +0x90
github.com/go-text/typesetting/fontscan.(*footprint).loadFromDisk(0xc001232000?)
        /home/user/go/pkg/mod/github.com/go-text/typesetting@v0.1.0/fontscan/footprint.go:112 +0x47
github.com/go-text/typesetting/fontscan.systemFontsIndex.assertValid({0xc001100000?, 0x1b2a560?, 0x0?})
        /home/user/go/pkg/mod/github.com/go-text/typesetting@v0.1.0/fontscan/scan.go:186 +0x11d
github.com/go-text/typesetting/fontscan.refreshSystemFontsIndex({0xe4c4e0, 0x1b2a560}, {0xc0007973b0, 0x25})
        /home/user/go/pkg/mod/github.com/go-text/typesetting@v0.1.0/fontscan/fontmap.go:203 +0x1cf
github.com/go-text/typesetting/fontscan.initSystemFonts.func1()
        /home/user/go/pkg/mod/github.com/go-text/typesetting@v0.1.0/fontscan/fontmap.go:179 +0xfe
sync.(*Once).doSlow(0x419945?, 0xc000055050?)
        /usr/lib/go/src/sync/once.go:76 +0xb4
sync.(*Once).Do(...)
        /usr/lib/go/src/sync/once.go:67
github.com/go-text/typesetting/fontscan.initSystemFonts({0xe4c4e0?, 0x1b2a560?}, {0x0?, 0x41f2b6?})
        /home/user/go/pkg/mod/github.com/go-text/typesetting@v0.1.0/fontscan/fontmap.go:167 +0x7e
github.com/go-text/typesetting/fontscan.(*FontMap).UseSystemFonts(0xc0001ac000, {0x0?, 0x0?})
        /home/user/go/pkg/mod/github.com/go-text/typesetting@v0.1.0/fontscan/fontmap.go:106 +0x45
fyne.io/fyne/v2/internal/painter.loadSystemFonts(...)
        /home/user/go/pkg/mod/fyne.io/fyne/v2@v2.5.1/internal/painter/font_prod.go:20
fyne.io/fyne/v2/internal/painter.loadMap()
        /home/user/go/pkg/mod/fyne.io/fyne/v2@v2.5.1/internal/painter/font.go:41 +0x52
sync.(*Once).doSlow(0xc000352e70?, 0xc0000552b8?)
        /usr/lib/go/src/sync/once.go:76 +0xb4
sync.(*Once).Do(...)
        /usr/lib/go/src/sync/once.go:67
fyne.io/fyne/v2/internal/painter.lookupLangFont({0xd2e40a, 0xa}, {0x80?, 0xc0?, 0x552d0?})
        /home/user/go/pkg/mod/fyne.io/fyne/v2@v2.5.1/internal/painter/font.go:50 +0xd8
fyne.io/fyne/v2/internal/painter.lookupFaces({0xe4dea8, 0x136cae0}, {0xe4dea8, 0x136cae0}, {0xe4dea8, 0x136ca60}, {0xd2e40a, 0xa}, {0x1, 0x0, ...})
        /home/user/go/pkg/mod/fyne.io/fyne/v2@v2.5.1/internal/painter/font.go:93 +0x305
fyne.io/fyne/v2/internal/painter.CachedFontFace({0x1, 0x0, 0x0, 0x0, 0x0, 0x0}, {0x0?, 0x0?}, {0x0, 0x0})
        /home/user/go/pkg/mod/fyne.io/fyne/v2@v2.5.1/internal/painter/font.go:138 +0x470
fyne.io/fyne/v2/internal/painter.measureText({0xd28aa2, 0x5}, 0x41600000, {0x1, 0x0, 0x0, 0x0, 0x0, 0x0}, {0x0, ...})
        /home/user/go/pkg/mod/fyne.io/fyne/v2@v2.5.1/internal/painter/font.go:233 +0x7c
fyne.io/fyne/v2/internal/painter.RenderedTextSize({0xd28aa2, 0x5}, 0x41600000, {0x1, 0x0, 0x0, 0x0, 0x0, 0x0}, {0x0, ...})
        /home/user/go/pkg/mod/fyne.io/fyne/v2@v2.5.1/internal/painter/font.go:219 +0xfd
fyne.io/fyne/v2/internal/driver/glfw.(*gLDriver).RenderedTextSize(0xa6c2b0?, {0xd28aa2?, 0x10?}, 0x555e8?, {0x1, 0x0, 0x0, 0x0, 0x0, 0x0}, ...)
        /home/user/go/pkg/mod/fyne.io/fyne/v2@v2.5.1/internal/driver/glfw/driver.go:72 +0x8b
fyne.io/fyne/v2/canvas.(*Text).MinSize(0xc000229950)
        /home/user/go/pkg/mod/fyne.io/fyne/v2@v2.5.1/canvas/text.go:43 +0xa8
fyne.io/fyne/v2/widget.formLabelLayout.MinSize({0xb4a5e0?}, {0xc000352590, 0x1, 0xc000055680?})
        /home/user/go/pkg/mod/fyne.io/fyne/v2@v2.5.1/widget/form.go:447 +0x64
fyne.io/fyne/v2.(*Container).MinSize(0xc0000556f0?)
        /home/user/go/pkg/mod/fyne.io/fyne/v2@v2.5.1/container.go:90 +0x51
fyne.io/fyne/v2/layout.(*formLayout).calculateTableSizes(0x46f07d?, {0xc0003646c0, 0x4, 0xc0002e65b0?}, 0x0)
        /home/user/go/pkg/mod/fyne.io/fyne/v2@v2.5.1/layout/formlayout.go:35 +0x145
fyne.io/fyne/v2/layout.(*formLayout).MinSize(0xc0000557a8?, {0xc0003646c0?, 0xc5fee0?, 0xce99e0?})
        /home/user/go/pkg/mod/fyne.io/fyne/v2@v2.5.1/layout/formlayout.go:110 +0x1b
fyne.io/fyne/v2.(*Container).MinSize(0x1365f70?)
        /home/user/go/pkg/mod/fyne.io/fyne/v2@v2.5.1/container.go:90 +0x51
fyne.io/fyne/v2/layout.vBoxLayout.Layout({0xc00019e798?}, {0xc0003cc280, 0x2, 0xc00019e768?}, {0x3022d0?, 0xc0?})
        /home/user/go/pkg/mod/fyne.io/fyne/v2@v2.5.1/layout/boxlayout.go:76 +0x310
fyne.io/fyne/v2.(*Container).layout(...)
        /home/user/go/pkg/mod/fyne.io/fyne/v2@v2.5.1/container.go:195
fyne.io/fyne/v2.(*Container).Refresh(0xc000180d70)
        /home/user/go/pkg/mod/fyne.io/fyne/v2@v2.5.1/container.go:114 +0x47
fyne.io/fyne/v2/internal/widget.(*SimpleRenderer).Refresh(0xe59e30?)
        /home/user/go/pkg/mod/fyne.io/fyne/v2@v2.5.1/internal/widget/simple_renderer.go:64 +0x25
fyne.io/fyne/v2/widget.(*BaseWidget).Refresh(0xc0000ea380)
        /home/user/go/pkg/mod/fyne.io/fyne/v2@v2.5.1/widget/widget.go:137 +0x9d
fyne.io/fyne/v2/widget.(*Form).Refresh(0xc0000ea380)
        /home/user/go/pkg/mod/fyne.io/fyne/v2@v2.5.1/widget/form.go:111 +0xf2
fyne.io/fyne/v2/widget.(*cardRenderer).applyTheme(0xc0003cc240)
        /home/user/go/pkg/mod/fyne.io/fyne/v2@v2.5.1/widget/card.go:237 +0x17d
fyne.io/fyne/v2/widget.(*Card).CreateRenderer(0xc000346100)
        /home/user/go/pkg/mod/fyne.io/fyne/v2@v2.5.1/widget/card.go:53 +0x3e5
fyne.io/fyne/v2/internal/cache.Renderer({0xe59e98, 0xc000346100})
        /home/user/go/pkg/mod/fyne.io/fyne/v2@v2.5.1/internal/cache/widget.go:33 +0x118
fyne.io/fyne/v2/widget.(*BaseWidget).MinSize(0xc000346100?)
        /home/user/go/pkg/mod/fyne.io/fyne/v2@v2.5.1/widget/widget.go:74 +0x31
fyne.io/fyne/v2/widget.(*Card).MinSize(0xc000346100)
        /home/user/go/pkg/mod/fyne.io/fyne/v2@v2.5.1/widget/card.go:60 +0x2f
fyne.io/fyne/v2/layout.vBoxLayout.MinSize({0xc000055b68?}, {0xc0003d8510, 0x3, 0xce99e0?})
        /home/user/go/pkg/mod/fyne.io/fyne/v2@v2.5.1/layout/boxlayout.go:120 +0x102
fyne.io/fyne/v2.(*Container).MinSize(0x1365fd0?)
        /home/user/go/pkg/mod/fyne.io/fyne/v2@v2.5.1/container.go:90 +0x51
fyne.io/fyne/v2/layout.hBoxLayout.Layout({0xc000352500?}, {0xc0003cc200, 0x2, 0xc000352500?}, {0x1?, 0x0?})
        /home/user/go/pkg/mod/fyne.io/fyne/v2@v2.5.1/layout/boxlayout.go:159 +0x310
fyne.io/fyne/v2.(*Container).layout(...)
        /home/user/go/pkg/mod/fyne.io/fyne/v2@v2.5.1/container.go:195
fyne.io/fyne/v2.(*Container).Refresh(0xc000180c30)
        /home/user/go/pkg/mod/fyne.io/fyne/v2@v2.5.1/container.go:114 +0x47
fyne.io/fyne/v2.(*Container).Refresh(0xc000180820)
        /home/user/go/pkg/mod/fyne.io/fyne/v2@v2.5.1/container.go:117 +0x6d
main.main.func1({{0xd2bc6b, 0x8}, {0xd4c95f, 0x1f}, 0xd864a8})
        /home/user/go/pkg/mod/fyne.io/fyne/v2@v2.5.1/cmd/fyne_demo/main.go:63 +0x2ab
main.makeNav.func5({0xc0002dd1a8, 0x8})
        /home/user/go/pkg/mod/fyne.io/fyne/v2@v2.5.1/cmd/fyne_demo/main.go:232 +0x123
fyne.io/fyne/v2/widget.(*Tree).Select(0xc000134100, {0xc0002dd1a8, 0x8})
        /home/user/go/pkg/mod/fyne.io/fyne/v2@v2.5.1/widget/tree.go:315 +0x134
main.makeNav(0xc0003644c0, 0x1)
        /home/user/go/pkg/mod/fyne.io/fyne/v2@v2.5.1/cmd/fyne_demo/main.go:239 +0x145
main.main()
        /home/user/go/pkg/mod/fyne.io/fyne/v2@v2.5.1/cmd/fyne_demo/main.go:71 +0x3f8

How to reproduce

Just run the README for the widget demo

$ go install fyne.io/fyne/v2/cmd/fyne_demo@latest
$ ~/go/bin/fyne_demo

Screenshots

No response

Example code

The is no example code.

Fyne version

latest

Go compiler version

go version go1.23.1 linux/amd64

Operating system and version

archlinux kde+wayland

Additional Information

No response

andydotxyz commented 1 week ago

It seems that it is choking on a system font you have somewhere. Can you please add a breakpoint to the app and find out what file is causing it, and share that here so we can replicate?

Probably: /home/user/go/pkg/mod/github.com/go-text/typesetting@v0.1.0/font/font.go:47 will tell you.

xmengnet commented 4 days ago

It seems that it is choking on a system font you have somewhere. Can you please add a breakpoint to the app and find out what file is causing it, and share that here so we can replicate?它似乎被您某处的系统字体窒息了。您能否在应用程序中添加一个断点并找出导致它的文件,并在此处分享以便我们进行复制?

Probably: /home/user/go/pkg/mod/github.com/go-text/typesetting@v0.1.0/font/font.go:47 will tell you.可能: /home/user/go/pkg/mod/github.com/go-text/typesetting@v0.1.0/font/font.go:47 会告诉你。

1Helvetica Bold.zip Thanks, I found that the file "/home/user/.local/share/fonts/1Helvetica Bold.ttf" caused panic, I deleted this font file and it worked fine