Skip to content

Commit 7e9e660

Browse files
committed
Minor changes, avoid recursive approach in readPacket()
1 parent 216197d commit 7e9e660

File tree

1 file changed

+34
-35
lines changed

1 file changed

+34
-35
lines changed

packets.go

+34-35
Original file line numberDiff line numberDiff line change
@@ -24,54 +24,53 @@ import (
2424

2525
// Read packet to buffer 'data'
2626
func (mc *mysqlConn) readPacket() ([]byte, error) {
27-
// Read packet header
28-
data, err := mc.buf.readNext(4)
29-
if err != nil {
30-
errLog.Print(err.Error())
31-
mc.Close()
32-
return nil, driver.ErrBadConn
33-
}
27+
var payload []byte
28+
for {
29+
// Read packet header
30+
data, err := mc.buf.readNext(4)
31+
if err != nil {
32+
errLog.Print(err.Error())
33+
mc.Close()
34+
return nil, driver.ErrBadConn
35+
}
3436

35-
// Packet Length [24 bit]
36-
pktLen := int(uint32(data[0]) | uint32(data[1])<<8 | uint32(data[2])<<16)
37+
// Packet Length [24 bit]
38+
pktLen := int(uint32(data[0]) | uint32(data[1])<<8 | uint32(data[2])<<16)
3739

38-
if pktLen < 1 {
39-
errLog.Print(errMalformPkt.Error())
40-
mc.Close()
41-
return nil, driver.ErrBadConn
42-
}
40+
if pktLen < 1 {
41+
errLog.Print(errMalformPkt.Error())
42+
mc.Close()
43+
return nil, driver.ErrBadConn
44+
}
4345

44-
// Check Packet Sync [8 bit]
45-
if data[3] != mc.sequence {
46-
if data[3] > mc.sequence {
47-
return nil, errPktSyncMul
48-
} else {
49-
return nil, errPktSync
46+
// Check Packet Sync [8 bit]
47+
if data[3] != mc.sequence {
48+
if data[3] > mc.sequence {
49+
return nil, errPktSyncMul
50+
} else {
51+
return nil, errPktSync
52+
}
5053
}
51-
}
52-
mc.sequence++
54+
mc.sequence++
5355

54-
// Read packet body [pktLen bytes]
55-
if data, err = mc.buf.readNext(pktLen); err == nil {
56-
if pktLen < maxPacketSize {
57-
return data, nil
56+
// Read packet body [pktLen bytes]
57+
data, err = mc.buf.readNext(pktLen)
58+
if err != nil {
59+
errLog.Print(err.Error())
60+
mc.Close()
61+
return nil, driver.ErrBadConn
5862
}
5963

6064
// Make a copy since data becomes invalid with the next read
6165
buf := make([]byte, len(data))
6266
copy(buf, data)
6367

64-
// More data
65-
data, err = mc.readPacket()
66-
if err == nil {
67-
return append(buf, data...), nil
68+
payload = append(payload, buf...)
69+
70+
if pktLen < maxPacketSize {
71+
return payload, nil
6872
}
6973
}
70-
71-
// err case
72-
mc.Close()
73-
errLog.Print(err.Error())
74-
return nil, driver.ErrBadConn
7574
}
7675

7776
// Write packet buffer 'data'

0 commit comments

Comments
 (0)