@@ -614,7 +614,7 @@ func readStatus(b []byte) statusFlag {
614614}
615615
616616// Ok Packet
617- // http ://dev.mysql.com/doc/internals/en/generic-response-packets.html# packet-OK_Packet
617+ // https ://dev.mysql.com/doc/internals/en/packet-OK_Packet.html
618618func (mc * mysqlConn ) handleOkPacket (data []byte ) error {
619619 // 0x00 or 0xFE [1 byte]
620620 n := 1
@@ -634,14 +634,19 @@ func (mc *mysqlConn) handleOkPacket(data []byte) error {
634634 }
635635
636636 // warning count [2 bytes]
637+ n += 2
637638
638639 return nil
639640}
640641
641642// isEOFPacket will return true if the data is either a EOF-Packet or OK-Packet
642643// acting as an EOF.
643- func isEOFPacket (data []byte ) bool {
644- return data [0 ] == iEOF && len (data ) < 9
644+ func (mc * mysqlConn ) isEOFPacket (data []byte ) bool {
645+ // Legacy EOF packet
646+ if data [0 ] == iEOF && (len (data ) == 5 || len (data ) == 1 ) && mc .flags & clientDeprecateEOF == 0 {
647+ return true
648+ }
649+ return data [0 ] == iEOF && len (data ) < 9 && mc .flags & clientDeprecateEOF != 0
645650}
646651
647652// Read Packets as Field Packets until EOF-Packet or an Error appears
@@ -655,7 +660,7 @@ func (mc *mysqlConn) readColumns(count int) ([]mysqlField, error) {
655660 return nil , err
656661 }
657662
658- if mc .flags & clientDeprecateEOF == 0 && isEOFPacket (data ) {
663+ if mc .isEOFPacket (data ) {
659664 if i == count {
660665 return columns , nil
661666 }
@@ -759,7 +764,7 @@ func (rows *textRows) readRow(dest []driver.Value) error {
759764 }
760765
761766 // EOF Packet
762- if isEOFPacket (data ) {
767+ if mc . isEOFPacket (data ) {
763768 if mc .flags & clientDeprecateEOF == 0 {
764769 // server_status [2 bytes]
765770 rows .mc .status = readStatus (data [3 :])
@@ -830,7 +835,7 @@ func (mc *mysqlConn) readUntilEOF() error {
830835 switch {
831836 case data [0 ] == iERR :
832837 return mc .handleErrorPacket (data )
833- case isEOFPacket (data ):
838+ case mc . isEOFPacket (data ):
834839 if mc .flags & clientDeprecateEOF == 0 {
835840 mc .status = readStatus (data [3 :])
836841 } else {
@@ -857,7 +862,7 @@ func (mc *mysqlConn) readPackets(num int) error {
857862 switch {
858863 case data [0 ] == iERR :
859864 return mc .handleErrorPacket (data )
860- case mc .flags & clientDeprecateEOF == 0 && isEOFPacket (data ):
865+ case mc .isEOFPacket (data ):
861866 mc .status = readStatus (data [3 :])
862867 return nil
863868 }
@@ -1223,7 +1228,7 @@ func (rows *binaryRows) readRow(dest []driver.Value) error {
12231228
12241229 // packet indicator [1 byte]
12251230 if data [0 ] != iOK {
1226- if isEOFPacket (data ) {
1231+ if rows . mc . isEOFPacket (data ) {
12271232 if rows .mc .flags & clientDeprecateEOF == 0 {
12281233 rows .mc .status = readStatus (data [3 :])
12291234 } else {
0 commit comments