diff --git a/binary/jce/reader.go b/binary/jce/reader.go index 3c6d5614..7d2f0a7e 100644 --- a/binary/jce/reader.go +++ b/binary/jce/reader.go @@ -90,6 +90,9 @@ func (r *JceReader) SkipField(c int) { } func (r *JceReader) readBytes(len int) []byte { + if len == 0 { + return nil + } b := make([]byte, len) _, err := r.buf.Read(b) if err != nil { diff --git a/client/online_push.go b/client/online_push.go index b85848a5..1eec697f 100644 --- a/client/online_push.go +++ b/client/online_push.go @@ -113,8 +113,8 @@ func decodeOnlinePushReqPacket(c *QQClient, info *incomingPacketInfo, payload [] if m.MsgType == 528 { vr := jce.NewJceReader(m.VMsg) subType := vr.ReadInt64(0) - protobuf := vr.ReadBytes(10) if decoder, ok := msg0x210Decoders[subType]; ok { + protobuf := vr.ReadBytes(10) if err := decoder(c, protobuf); err != nil { return nil, errors.Wrap(err, "decode online push 0x210 error") }