Wingo crashes with xvncviewer+ssh
Opened this issue · 1 comments
When starting xvncviewer from an ssh session with X forwarding enabled, Wingo will crash. It does not crash if I run xvncviewer locally. Other windows, such as xterm or even tightvncviewer, will not crash wingo when run over ssh+x forwarding. Here's the output:
XGB: conn.go:36: Could not get authority info: EOF
XGB: conn.go:37: Trying connection without authority info...
WINGO WARNING: config_theme_setters.go:179: Could not get font data from '/usr/share/fonts/TTF/DejaVuSansMono-Bold.ttf' because: open /usr/share/fonts/TTF/DejaVuSansMono-Bold.ttf: no such file or directory
WINGO WARNING: config_theme_setters.go:167: Could not load './data/minimize.png' as a png image because: open ./data/minimize.png: no such file or directory
WINGO WARNING: config_theme_setters.go:167: Could not load './data/minimize.png' as a png image because: open ./data/minimize.png: no such file or directory
WINGO WARNING: config_theme_setters.go:167: Could not load './data/close.png' as a png image because: open ./data/close.png: no such file or directory
WINGO WARNING: config_theme_setters.go:167: Could not load './data/close.png' as a png image because: open ./data/close.png: no such file or directory
WINGO WARNING: config_theme_setters.go:167: Could not load './data/maximize.png' as a png image because: open ./data/maximize.png: no such file or directory
WINGO WARNING: config_theme_setters.go:167: Could not load './data/maximize.png' as a png image because: open ./data/maximize.png: no such file or directory
WINGO WARNING: config_theme_setters.go:179: Could not get font data from '/usr/share/fonts/TTF/DejaVuSansMono.ttf' because: open /usr/share/fonts/TTF/DejaVuSansMono.ttf: no such file or directory
WINGO WARNING: config_theme_setters.go:179: Could not get font data from '/usr/share/fonts/TTF/DejaVuSansMono-Bold.ttf' because: open /usr/share/fonts/TTF/DejaVuSansMono-Bold.ttf: no such file or directory
WINGO WARNING: config_theme_setters.go:167: Could not load './data/wingo.png' as a png image because: open ./data/wingo.png: no such file or directory
WINGO WARNING: manage.go:249: Could not find window type for window 80000D, using 'normal'.
panic: runtime error: index out of range
goroutine 12 [running]:
xgb/xproto.configureWindowRequest(0xc200cd0000, 0x1000a00009, 0x7f0090c749fc, 0x0, 0x0, ...)
/home/john/wingo/src/xgb/xproto/xproto.go:7692 +0x370
xgb/xproto.ConfigureWindow(0xc200cd0000, 0x1000a00009, 0x7f0090c749fc, 0x0, 0x0, ...)
/home/john/wingo/src/xgb/xproto/xproto.go:7650 +0x8c
xgbutil/xwindow.(*Window).Configure(0xc200638bd0, 0x10, 0x0, 0x0, 0x190, ...)
/home/john/wingo/src/xgbutil/xwindow/xwindow.go:220 +0x69e
main.func·005(0xc2000ea280, 0xc2006362a0)
/home/john/wingo/src/wingo/root.go:56 +0xd6
xgbutil/xevent.ConfigureRequestFun.Run(0x8e7ed0, 0xc2000ea280, 0x7d8940, 0xc2006362a0)
/home/john/wingo/src/xgbutil/xevent/callback.go:256 +0x5d
xgbutil/xevent.runCallbacks(0xc2000ea280, 0x7d8940, 0xc2006362a0, 0x17, 0x286, ...)
/home/john/wingo/src/xgbutil/xevent/xevent.go:207 +0x102
xgbutil/xevent.processEventQueue(0xc2000ea280, 0xc200289c60, 0xc200289cc0)
/home/john/wingo/src/xgbutil/xevent/eventloop.go:238 +0xcac
xgbutil/xevent.mainEventLoop(0xc2000ea280, 0xc200289c60, 0xc200289cc0, 0xc200289d20)
/home/john/wingo/src/xgbutil/xevent/eventloop.go:109 +0x97
xgbutil/xevent.func·001()
/home/john/wingo/src/xgbutil/xevent/eventloop.go:88 +0x4c
created by xgbutil/xevent.MainPing
/home/john/wingo/src/xgbutil/xevent/eventloop.go:89 +0x130
goroutine 1 [chan receive]:
main.main()
/home/john/wingo/src/wingo/main.go:197 +0x886
goroutine 2 [syscall]:
goroutine 4 [chan send]:
xgb.(*Conn).generateXIds(0xc200cd0000)
/home/john/wingo/src/xgb/xgb.go:236 +0x195
created by xgb.NewConnDisplay
/home/john/wingo/src/xgb/xgb.go:110 +0x19e
goroutine 5 [chan send]:
xgb.(*Conn).generateSeqIds(0xc200cd0000)
/home/john/wingo/src/xgb/xgb.go:258 +0x63
created by xgb.NewConnDisplay
/home/john/wingo/src/xgb/xgb.go:111 +0x1b5
goroutine 6 [chan receive]:
xgb.(*Conn).sendRequests(0xc200cd0000)
/home/john/wingo/src/xgb/xgb.go:303 +0x63
created by xgb.NewConnDisplay
/home/john/wingo/src/xgb/xgb.go:112 +0x1cc
goroutine 7 [IO wait]:
net.runtime_pollWait(0x7f0092ca8f00, 0x72, 0x0)
/usr/local/go/src/pkg/runtime/znetpoll_linux_amd64.c:118 +0x82
net.(*pollDesc).WaitRead(0xc200ccb230, 0xb, 0xc200331780)
/usr/local/go/src/pkg/net/fd_poll_runtime.go:75 +0x31
net.(*netFD).Read(0xc200ccb1b0, 0xc200623260, 0x20, 0x20, 0x0, ...)
/usr/local/go/src/pkg/net/fd_unix.go:195 +0x2b3
net.(*conn).Read(0xc200cc5b28, 0xc200623260, 0x20, 0x20, 0x7f00a4ea77e8, ...)
/usr/local/go/src/pkg/net/net.go:123 +0xc3
io.ReadAtLeast(0xc2003317e0, 0xc200cc5b28, 0xc200623260, 0x20, 0x20, ...)
/usr/local/go/src/pkg/io/io.go:284 +0xf7
io.ReadFull(0xc2003317e0, 0xc200cc5b28, 0xc200623260, 0x20, 0x20, ...)
/usr/local/go/src/pkg/io/io.go:302 +0x6f
xgb.(*Conn).readResponses(0xc200cd0000)
/home/john/wingo/src/xgb/xgb.go:370 +0x1f2
created by xgb.NewConnDisplay
/home/john/wingo/src/xgb/xgb.go:113 +0x1e3
goroutine 9 [IO wait]:
net.runtime_pollWait(0x7f0092ca8e60, 0x72, 0x0)
/usr/local/go/src/pkg/runtime/znetpoll_linux_amd64.c:118 +0x82
net.(*pollDesc).WaitRead(0xc200cca620, 0xb, 0xc200331780)
/usr/local/go/src/pkg/net/fd_poll_runtime.go:75 +0x31
net.(*netFD).accept(0xc200cca5a0, 0x8e8020, 0x0, 0xc200331780, 0xb, ...)
/usr/local/go/src/pkg/net/fd_unix.go:385 +0x2c1
net.(*UnixListener).AcceptUnix(0xc200b63240, 0x18, 0xc200b68010, 0x401197)
/usr/local/go/src/pkg/net/unixsock_posix.go:286 +0x49
net.(*UnixListener).Accept(0xc200b63240, 0x0, 0x0, 0x0, 0x0, ...)
/usr/local/go/src/pkg/net/unixsock_posix.go:297 +0x49
main.ipc(0xc2000ea280)
/home/john/wingo/src/wingo/ipc.go:37 +0x1d9
created by main.main
/home/john/wingo/src/wingo/main.go:154 +0x502
goroutine 10 [IO wait]:
net.runtime_pollWait(0x7f0092ca8dc0, 0x72, 0x0)
/usr/local/go/src/pkg/runtime/znetpoll_linux_amd64.c:118 +0x82
net.(*pollDesc).WaitRead(0xc200cc86b0, 0xb, 0xc200331780)
/usr/local/go/src/pkg/net/fd_poll_runtime.go:75 +0x31
net.(*netFD).accept(0xc200cc8630, 0x8e8020, 0x0, 0xc200331780, 0xb, ...)
/usr/local/go/src/pkg/net/fd_unix.go:385 +0x2c1
net.(*UnixListener).AcceptUnix(0xc200b67320, 0xc200e7b218, 0xc200b4b6c0, 0xc200b4b720)
/usr/local/go/src/pkg/net/unixsock_posix.go:286 +0x49
net.(*UnixListener).Accept(0xc200b67320, 0x0, 0x0, 0x0, 0x0, ...)
/usr/local/go/src/pkg/net/unixsock_posix.go:297 +0x49
wingo/event.Notifier(0xc2000ea280, 0xc200b67260, 0x16)
/home/john/wingo/src/wingo/event/ipc.go:31 +0x237
created by main.main
/home/john/wingo/src/wingo/main.go:157 +0x544
goroutine 11 [select]:
wingo/event.func·002()
/home/john/wingo/src/wingo/event/ipc.go:134 +0x34f
created by wingo/event.manageSubscriptions
/home/john/wingo/src/wingo/event/ipc.go:154 +0x154
goroutine 18 [syscall]:
syscall.Syscall6()
/usr/local/go/src/pkg/syscall/asm_linux_amd64.s:41 +0x5
syscall.wait4(0x4199, 0xc20060efb0, 0x0, 0xc200ccb480, 0x100000001, ...)
/usr/local/go/src/pkg/syscall/zerrors_linux_amd64.go:1640 +0x7b
syscall.Wait4(0x4199, 0x7f0090c81d0c, 0x0, 0xc200ccb480, 0x3, ...)
/usr/local/go/src/pkg/syscall/syscall_linux.go:222 +0x6c
os.(*Process).wait(0xc20063b2c0, 0x7f0090c81d90, 0x0, 0x0)
/usr/local/go/src/pkg/os/exec_unix.go:22 +0xea
os.(*Process).Wait(0xc20063b2c0, 0x3, 0x5990d8, 0x8e8048)
/usr/local/go/src/pkg/os/doc.go:43 +0x25
os/exec.(*Cmd).Wait(0xc200642000, 0x0, 0x0)
/usr/local/go/src/pkg/os/exec/exec.go:310 +0x197
os/exec.(*Cmd).Run(0xc200642000, 0x4, 0x7f0090c81ec0)
/usr/local/go/src/pkg/os/exec/exec.go:232 +0x52
wingo/commands.func·065()
/home/john/wingo/src/wingo/commands/commands.go:1053 +0x26d
created by wingo/commands.Shell.Run
/home/john/wingo/src/wingo/commands/commands.go:1061 +0xc5
goroutine 19 [syscall]:
syscall.Syscall()
/usr/local/go/src/pkg/syscall/asm_linux_amd64.s:16 +0x5
syscall.read(0xb, 0xc200644000, 0x200, 0x200, 0x800, ...)
/usr/local/go/src/pkg/syscall/zerrors_linux_amd64.go:2337 +0x70
syscall.Read(0xb, 0xc200644000, 0x200, 0x200, 0x41aca4, ...)
/usr/local/go/src/pkg/syscall/syscall_unix.go:132 +0x5a
os.(*File).read(0xc20060ef58, 0xc200644000, 0x200, 0x200, 0x6e7ce0, ...)
/usr/local/go/src/pkg/os/file_unix.go:174 +0x60
os.(*File).Read(0xc20060ef58, 0xc200644000, 0x200, 0x200, 0x0, ...)
/usr/local/go/src/pkg/os/file.go:95 +0x96
bytes.(*Buffer).ReadFrom(0xc20063c2a0, 0xc2001082a0, 0xc20060ef58, 0x0, 0x0, ...)
/usr/local/go/src/pkg/bytes/buffer.go:169 +0x203
io.Copy(0xc200b64960, 0xc20063c2a0, 0xc2001082a0, 0xc20060ef58, 0x0, ...)
/usr/local/go/src/pkg/io/io.go:340 +0xa3
os/exec.func·003(0x0, 0x0)
/usr/local/go/src/pkg/os/exec/exec.go:207 +0x60
os/exec.func·004(0xc20063b180)
/usr/local/go/src/pkg/os/exec/exec.go:276 +0x2a
created by os/exec.(*Cmd).Start
/usr/local/go/src/pkg/os/exec/exec.go:277 +0x732
xinit: connection to X server lost
^M
Server terminated successfully (0). Closing log file.
Interesting bug. I didn't try to re-create it because I have a good guess at what went wrong. But basically, there was a bug in my configure request handling code where there could be more bits set in the mask than the number of values given. The only case that could trigger that (I believe, by inspection of the code) is if the client is trying to set the border width of their window. My fix is to always explicitly ignore changes to the border width.
It working locally but not remotely is a bit strange though, so I'll hold my breath until you confirm that it's been fixed.
Note that this bug was fixed in xgbutil and not Wingo. You can update all of xgbutil like so:
go get -u github.com/BurntSushi/xgbutil/...
Note the three trailing dots. You'll then have to rebuild Wingo. (Whether by go install
or go get -u github.com/BurntSushi/wingo
.)
Finally, the fix is in commit BurntSushi/xgbutil@9f9f7ed.
(If you're tracking Wingo via the AUR on Archlinux, then a reinstall should do the necessary updates.)