Open libangzhu opened 3 years ago
Thank you for reporting! This looks like a bug, will investigate.
It doesn't look like the bug is in this package though:
https://github.com/libp2p/go-msgio/blob/7083218d76fc1304c17bd92c8e001a300cf2c7d6/msgio.go#L229-L235
read
will always be smaller or equal len(msg)
, so taking msg[:read]
should never be an invalid operation.
This looks exactly like #16.
It doesn't look like the bug is in this package though: https://github.com/libp2p/go-msgio/blob/7083218d76fc1304c17bd92c8e001a300cf2c7d6/msgio.go#L229-L235
read
will always be smaller or equallen(msg)
, so takingmsg[:read]
should never be an invalid operation. This looks exactly like #16.
this problem just occasional on windows, and we are confused those code seems impossible to have a panic
`panic: runtime error: slice bounds out of range [:826] with capacity 512
goroutine 9921985 [running]: github.com/libp2p/go-msgio.(reader).ReadMsg(0xc00c5d44c0, 0x0, 0x0, 0x0, 0x0, 0x0) D:/goWork/pkg/mod/github.com/libp2p/go-msgio@v0.0.6/msgio.go:235 +0x2dc github.com/libp2p/go-libp2p-secio.(etmReader).fill(0xc0052e34a0, 0x1de, 0x0) D:/goWork/pkg/mod/github.com/libp2p/go-libp2p-secio@v0.2.2/rw.go:132 +0x3f github.com/libp2p/go-libp2p-secio.(etmReader).Read(0xc0052e34a0, 0xc00c525cd0, 0xc, 0xc, 0x0, 0x0, 0x0) D:/goWork/pkg/mod/github.com/libp2p/go-libp2p-secio@v0.2.2/rw.go:171 +0x2a5 io.ReadAtLeast(0x2a09e810, 0xc003127000, 0xc00c525cd0, 0xc, 0xc, 0xc, 0xc, 0x0, 0x0) C:/Go/src/io/io.go:310 +0x8e io.ReadFull(...) C:/Go/src/io/io.go:329 github.com/libp2p/go-yamux.(Session).recvLoop(0xc000131ce0, 0x0, 0x0) D:/goWork/pkg/mod/github.com/libp2p/go-yamux@v1.3.7/session.go:526 +0xe1 github.com/libp2p/go-yamux.(*Session).recv(0xc000131ce0) D:/goWork/pkg/mod/github.com/libp2p/go-yamux@v1.3.7/session.go:505 +0x32 created by github.com/libp2p/go-yamux.newSession D:/goWork/pkg/mod/github.com/libp2p/go-yamux@v1.3.7/session.go:125 +0x380 panic: runtime error: slice bounds out of range [:2158] with capacity 2048
goroutine 4538928 [running]: github.com/libp2p/go-msgio.(reader).ReadMsg(0xc00a7aae40, 0x0, 0x0, 0x0, 0x0, 0x0) D:/goWork/pkg/mod/github.com/libp2p/go-msgio@v0.0.6/msgio.go:235 +0x2dc github.com/libp2p/go-libp2p-secio.(etmReader).fill(0xc00066e500, 0x65d, 0x0) D:/goWork/pkg/mod/github.com/libp2p/go-libp2p-secio@v0.2.2/rw.go:132 +0x3f github.com/libp2p/go-libp2p-secio.(etmReader).Read(0xc00066e500, 0xc006460390, 0xc, 0xc, 0x0, 0x0, 0x0) D:/goWork/pkg/mod/github.com/libp2p/go-libp2p-secio@v0.2.2/rw.go:171 +0x2a5 io.ReadAtLeast(0x2a4a9c88, 0xc005b4a000, 0xc006460390, 0xc, 0xc, 0xc, 0xc, 0x0, 0x0) C:/Go/src/io/io.go:310 +0x8e io.ReadFull(...) C:/Go/src/io/io.go:329 github.com/libp2p/go-yamux.(Session).recvLoop(0xc001960e00, 0x0, 0x0) D:/goWork/pkg/mod/github.com/libp2p/go-yamux@v1.3.7/session.go:526 +0xe1 github.com/libp2p/go-yamux.(*Session).recv(0xc001960e00) D:/goWork/pkg/mod/github.com/libp2p/go-yamux@v1.3.7/session.go:505 +0x32 created by github.com/libp2p/go-yamux.newSession D:/goWork/pkg/mod/github.com/libp2p/go-yamux@v1.3.7/session.go:125 +0x380 panic: runtime error: slice bounds out of range [:798] with capacity 512
`
the go-msgio version we use is v0.0.6
16
33cn/chain33/issues/1000