当我尝试访问包含从一个客户端流式传输到服务器的消息的缓冲区的一部分(使用创建)时,我panic: runtime error: slice bounds out of range
从生成的服务器文件中反复出现崩溃( )。 这个问题只出现在客户端和服务器端集成的时候。自己测试,client和server都使用成功,server没有crash 知道: - 发送和接收是一样的,(排除通信方式的问题) - 之前发送的数据格式正确它被放入'并发送。 是什么原因造成的?flatbuffers
flatbuffers
flatbuffers
// see the boundary tests below
byte[]
flatbuffers
buffer
我有c++
一个go
使用FlatBuffers
. _
客户端和服务器都有自动边界测试,确认它们各自“正确地”使用flatbuffers
它们应该的方式。(即客户端在发送缓冲区之前创建缓冲区,服务器在访问缓冲区之前接收缓冲区)
这些测试有效。我们正在使用FlatBuffers-v1.10.0
我的问题是,当它们一起使用时,服务器在访问缓冲区时 总是出现以下错误:
panic: runtime error: slice bounds out of range
goroutine 19 [running]:
github.com/google/flatbuffers/go.(*Table).GetVOffsetT(...)
/home/.../go/github.com/google/flatbuffers/go/table.go:134
github.com/google/flatbuffers/go.(*Table).OffsetT(0x4000045c68, 0x4000000004, 0x4000160008)
/home/.../go/github.com/google/flatbuffers/go/table.go:16 +0xf0
github.com/PhantomIntelligence/Server/lib/Protocol/Stream.(*StreamedData).Id(0x4000045c68, 0x4000045c68)
/home/.../go/github.com/PhantomIntelligence/Server/lib/Protocol/Stream/SteamedData.go:30 +0x2c
github.com/PhantomIntelligence/Server/dataAccess/conversion/flatBuffers.ConvertStreamMessage(0x4000015a000, 0xa7c, 0xe00, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0)
/home/.../go/github.com/PhantomIntelligence/Server/dataAccess/conversion/flatBuffers/deserialization.go:55 +0x1fc
... // the rest is irrelevant for this question's purpose
当服务器尝试访问它以使用它时,崩溃总是发生在服务器接收到的第一个缓冲区上。更具体地说,它总是在尝试访问ContainerData
7th 的(0th, 12th or 15th) 时发生Container
。
知道对于这个用例,我们发送一个带有 16 个容器的StreamedData,每个容器包含 16 个ContainerData
请注意,只有结构保留在我的原始实现中。我不能泄露我们处理的数据的性质。因此对象名称可能看起来很奇怪,但结构是相关的部分。
客户c++
端在编译期间运行它:
flatc -o lib/ --no-js-exports --no-prefix --scoped-enums --cpp schemas/*.fbs
服务器在编译期间运行它 go
:
flatc -o lib/ --no-js-exports --no-prefix --scoped-enums --go schemas/*.fbs
客户端和服务器都使用以下模式:
请注意,此摘录不是完整的架构,只是与此问题相关的部分。
烙印99
牧羊人nacy
相关分类