@@ -117,39 +117,33 @@ func (mc *mysqlConn) writePacket(data []byte) error {
117117 // Write packet
118118 if mc .writeTimeout > 0 {
119119 if err := mc .netConn .SetWriteDeadline (time .Now ().Add (mc .writeTimeout )); err != nil {
120- mc .cleanup ()
121120 mc .log (err )
121+ mc .cleanup ()
122122 return err
123123 }
124124 }
125125
126126 n , err := mc .netConn .Write (data [:4 + size ])
127- if err == nil && n == 4 + size {
128- mc .sequence ++
129- if size != maxPacketSize {
130- return nil
131- }
132- pktLen -= size
133- data = data [size :]
134- continue
135- }
136-
137- // Handle error
138- if err == nil { // n != len(data)
127+ if err != nil {
139128 mc .cleanup ()
140- mc .log (ErrMalformPkt )
141- } else {
142129 if cerr := mc .canceled .Value (); cerr != nil {
143130 return cerr
144131 }
145- if n == 0 && pktLen == len (data )- 4 {
146- // only for the first loop iteration when nothing was written yet
147- return errBadConnNoWrite
148- }
132+ return err
133+ }
134+ if n != 4 + size {
135+ // io.Writer(b) must return a non-nil error if it cannot write len(b) bytes.
136+ // The io.ErrShortWrite error is used to indicate that this rule has not been followed.
149137 mc .cleanup ()
150- mc . log ( err )
138+ return io . ErrShortWrite
151139 }
152- return ErrInvalidConn
140+
141+ mc .sequence ++
142+ if size != maxPacketSize {
143+ return nil
144+ }
145+ pktLen -= size
146+ data = data [size :]
153147 }
154148}
155149
@@ -305,8 +299,8 @@ func (mc *mysqlConn) writeHandshakeResponsePacket(authResp []byte, plugin string
305299 data , err := mc .buf .takeBuffer (pktLen + 4 )
306300 if err != nil {
307301 // cannot take the buffer. Something must be wrong with the connection
308- mc .log ( err )
309- return errBadConnNoWrite
302+ mc .cleanup ( )
303+ return err
310304 }
311305
312306 // ClientFlags [32 bit]
@@ -394,8 +388,8 @@ func (mc *mysqlConn) writeAuthSwitchPacket(authData []byte) error {
394388 data , err := mc .buf .takeSmallBuffer (pktLen )
395389 if err != nil {
396390 // cannot take the buffer. Something must be wrong with the connection
397- mc .log ( err )
398- return errBadConnNoWrite
391+ mc .cleanup ( )
392+ return err
399393 }
400394
401395 // Add the auth data [EOF]
@@ -414,8 +408,8 @@ func (mc *mysqlConn) writeCommandPacket(command byte) error {
414408 data , err := mc .buf .takeSmallBuffer (4 + 1 )
415409 if err != nil {
416410 // cannot take the buffer. Something must be wrong with the connection
417- mc .log ( err )
418- return errBadConnNoWrite
411+ mc .cleanup ( )
412+ return err
419413 }
420414
421415 // Add command byte
@@ -433,8 +427,8 @@ func (mc *mysqlConn) writeCommandPacketStr(command byte, arg string) error {
433427 data , err := mc .buf .takeBuffer (pktLen + 4 )
434428 if err != nil {
435429 // cannot take the buffer. Something must be wrong with the connection
436- mc .log ( err )
437- return errBadConnNoWrite
430+ mc .cleanup ( )
431+ return err
438432 }
439433
440434 // Add command byte
@@ -454,8 +448,8 @@ func (mc *mysqlConn) writeCommandPacketUint32(command byte, arg uint32) error {
454448 data , err := mc .buf .takeSmallBuffer (4 + 1 + 4 )
455449 if err != nil {
456450 // cannot take the buffer. Something must be wrong with the connection
457- mc .log ( err )
458- return errBadConnNoWrite
451+ mc .cleanup ( )
452+ return err
459453 }
460454
461455 // Add command byte
@@ -997,8 +991,8 @@ func (stmt *mysqlStmt) writeExecutePacket(args []driver.Value) error {
997991 }
998992 if err != nil {
999993 // cannot take the buffer. Something must be wrong with the connection
1000- mc .log ( err )
1001- return errBadConnNoWrite
994+ mc .cleanup ( )
995+ return err
1002996 }
1003997
1004998 // command [1 byte]
@@ -1196,8 +1190,8 @@ func (stmt *mysqlStmt) writeExecutePacket(args []driver.Value) error {
11961190 if valuesCap != cap (paramValues ) {
11971191 data = append (data [:pos ], paramValues ... )
11981192 if err = mc .buf .store (data ); err != nil {
1199- mc .log ( err )
1200- return errBadConnNoWrite
1193+ mc .cleanup ( )
1194+ return err
12011195 }
12021196 }
12031197
0 commit comments