From a8d1e40a27a09f59cd93f6bb364f6304537f9606 Mon Sep 17 00:00:00 2001 From: wdvxdr Date: Fri, 10 Feb 2023 21:36:12 +0800 Subject: [PATCH] client: try fix panic in decodeMultiApplyDownResponse --- client/multimsg.go | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/client/multimsg.go b/client/multimsg.go index 000794e0..f498b4ed 100644 --- a/client/multimsg.go +++ b/client/multimsg.go @@ -97,15 +97,23 @@ func decodeMultiApplyDownResponse(_ *QQClient, _ *network.IncomingPacketInfo, pa return nil, errors.Wrap(err, "failed to unmarshal protobuf message") } if len(body.MultimsgApplydownRsp) == 0 { - return nil, errors.New("not found") + return nil, errors.New("message not found") } rsp := body.MultimsgApplydownRsp[0] + if rsp.ThumbDownPara == nil { + return nil, errors.New("message not found") + } + var prefix string if rsp.MsgExternInfo != nil && rsp.MsgExternInfo.ChannelType == 2 { prefix = "https://ssl.htdata.qq.com" } else { - prefix = fmt.Sprintf("http://%s:%d", binary.UInt32ToIPV4Address(uint32(rsp.Uint32DownIp[0])), body.MultimsgApplydownRsp[0].Uint32DownPort[0]) + ma := body.MultimsgApplydownRsp[0] + if len(rsp.Uint32DownIp) == 0 || len(ma.Uint32DownPort) == 0 { + return nil, errors.New("message not found") + } + prefix = fmt.Sprintf("http://%s:%d", binary.UInt32ToIPV4Address(uint32(rsp.Uint32DownIp[0])), ma.Uint32DownPort[0]) } b, err := utils.HttpGetBytes(fmt.Sprintf("%s%s", prefix, string(rsp.ThumbDownPara)), "") if err != nil {