@@ -102,13 +102,12 @@ func ParsePrivateMessage(msg *message.PushMsgBody) *PrivateMessage {
102102 UID : msg .ResponseHead .FromUid .Unwrap (),
103103 IsFriend : true ,
104104 },
105- Time : msg .ContentHead .TimeStamp .Unwrap (),
106- Elements : ParseMessageElements (msg .Body .RichText .Elems ),
105+ Time : msg .ContentHead .TimeStamp .Unwrap (),
107106 }
108107 if msg .Body != nil {
108+ prvMsg .Elements = ParseMessageElements (msg .Body .RichText .Elems )
109109 prvMsg .Elements = append (prvMsg .Elements , ParseMessageBody (msg .Body , false )... )
110110 }
111-
112111 return prvMsg
113112}
114113
@@ -125,11 +124,12 @@ func ParseGroupMessage(msg *message.PushMsgBody) *GroupMessage {
125124 CardName : msg .ResponseHead .Grp .MemberName ,
126125 IsFriend : false ,
127126 },
128- Time : msg .ContentHead .TimeStamp .Unwrap (),
129- Elements : ParseMessageElements ( msg . Body . RichText . Elems ),
127+ Time : msg .ContentHead .TimeStamp .Unwrap (),
128+
130129 OriginalObject : msg ,
131130 }
132131 if msg .Body != nil {
132+ grpMsg .Elements = ParseMessageElements (msg .Body .RichText .Elems )
133133 grpMsg .Elements = append (grpMsg .Elements , ParseMessageBody (msg .Body , true )... )
134134 }
135135 return grpMsg
@@ -288,7 +288,7 @@ func ParseMessageElements(msg []*message.Elem) []IMessageElement {
288288 case 48 :
289289 extra := & oidb2.MsgInfo {}
290290 err := proto .Unmarshal (elem .CommonElem .PbElem , extra )
291- if err != nil {
291+ if err != nil || len ( extra . MsgInfoBody ) == 0 { // 不合理的合并转发会导致越界
292292 continue
293293 }
294294 index := extra .MsgInfoBody [0 ].Index
@@ -314,6 +314,7 @@ func ParseMessageElements(msg []*message.Elem) []IMessageElement {
314314 Sha1 : utils .MustParseHexStr (index .Info .FileSha1 ),
315315 Duration : index .Info .Time ,
316316 Node : index ,
317+ MsgInfo : extra ,
317318 })
318319 case 11 , 21 : // video
319320 var thumb = new (VideoThumb )
@@ -326,13 +327,14 @@ func ParseMessageElements(msg []*message.Elem) []IMessageElement {
326327 thumb .Sha1 = utils .MustParseHexStr (info .Info .FileSha1 )
327328 }
328329 res = append (res , & ShortVideoElement {
329- Name : index .Info .FileName ,
330- UUID : index .FileUuid ,
331- Md5 : utils .MustParseHexStr (index .Info .FileHash ),
332- Sha1 : utils .MustParseHexStr (index .Info .FileSha1 ),
333- Size : index .Info .FileSize ,
334- Thumb : thumb ,
335- Node : index ,
330+ Name : index .Info .FileName ,
331+ UUID : index .FileUuid ,
332+ Md5 : utils .MustParseHexStr (index .Info .FileHash ),
333+ Sha1 : utils .MustParseHexStr (index .Info .FileSha1 ),
334+ Size : index .Info .FileSize ,
335+ Thumb : thumb ,
336+ Node : index ,
337+ MsgInfo : extra ,
336338 })
337339 }
338340 case 3 : // 闪照
0 commit comments