MiraiGo icon indicating copy to clipboard operation
MiraiGo copied to clipboard

fix: 修复空指针可能导致panic的问题

Open asjdf opened this issue 3 years ago • 9 comments

panic: interface conversion: interface {} is nil, not *client.GroupSystemMessages

goroutine 31 [running]: github.com/Mrs4s/MiraiGo/client.(*QQClient).GetGroupSystemMessages(0x19919ab95fdf8?) C:/Users/atom/go/pkg/mod/github.com/!mrs4s/[email protected]/client/system_msg.go:51 +0x305

asjdf avatar Aug 11 '22 13:08 asjdf

最佳的修复方法应该是:检查 sendAndWait 函数在非 err 情况下仍会返回 nil 的位置,并在此修正

qianjunakasumi avatar Aug 11 '22 13:08 qianjunakasumi

最佳的修复方法应该是:检查 sendAndWait 函数在非 err 情况下仍会返回 nil 的位置,并在此修正

检查中,暂时没想明白

asjdf avatar Aug 11 '22 13:08 asjdf

感谢迅速的回复

asjdf avatar Aug 11 '22 13:08 asjdf

最佳的修复方法应该是:检查 sendAndWait 函数在非 err 情况下仍会返回 nil 的位置,并在此修正

看了内部的逻辑,但感觉问题不是出在这一层,应该再更深层?因为感觉该函数内几个 error 的判断都没有啥问题。

感觉问题源自这里的上游,但是个人能力有限,希望大佬能协助排查一下问题。

https://github.com/Mrs4s/MiraiGo/blob/5c0e2c5773de4666857ef199e56364d34819a026/client/network.go#L183

asjdf avatar Aug 11 '22 13:08 asjdf

彻底解决此问题可能需要动态复现并追踪。

建议临时解决方案是直接在 Line 183 处判断 res.Response 是否为 nil,自定义 error 消息并返回,以避免 panic

qianjunakasumi avatar Aug 16 '22 16:08 qianjunakasumi

目前复现有一定的难度,我暂时还未能稳定复现此问题。

asjdf avatar Aug 16 '22 17:08 asjdf

这个地方应该检查相应 decode 函数的逻辑, 而不是直接在上游函数加个简单判断

Mrs4s avatar Aug 16 '22 17:08 Mrs4s

啊啊 非常抱歉

asjdf avatar Aug 16 '22 17:08 asjdf

请问大佬们有交流群之类的吗?

asjdf avatar Aug 16 '22 17:08 asjdf