Skip to content

Commit 98894ce

Browse files
authored
Merge pull request #455 from dolthub/aaron/mysql-conn-ephemeral-packet-recycle-on-error
go/mysql: Add some recycleWritePacket calls on error returning paths where the ephemeral packet was not previously returned.
2 parents b14ed9b + 2eced75 commit 98894ce

File tree

4 files changed

+10
-0
lines changed

4 files changed

+10
-0
lines changed

go/mysql/client.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -725,6 +725,7 @@ func (c *Conn) writeHandshakeResponse41(capabilities uint32, scrambledPassword [
725725

726726
// Sanity-check the length.
727727
if pos != len(data) {
728+
c.recycleWritePacket()
728729
return NewSQLError(CRMalformedPacket, SSUnknownSQLState, "writeHandshakeResponse41: only packed %v bytes, out of %v allocated", pos, len(data))
729730
}
730731

@@ -791,6 +792,7 @@ func (c *Conn) writeClearTextPassword(params *ConnParams) error {
791792
pos = writeNullString(data, pos, params.Pass)
792793
// Sanity check.
793794
if pos != len(data) {
795+
c.recycleWritePacket()
794796
return vterrors.Errorf(vtrpcpb.Code_INTERNAL, "error building ClearTextPassword packet: got %v bytes expected %v", pos, len(data))
795797
}
796798
return c.writeEphemeralPacket()
@@ -804,6 +806,7 @@ func (c *Conn) writeScrambledPassword(scrambledPassword []byte) error {
804806
pos += copy(data[pos:], scrambledPassword)
805807
// Sanity check.
806808
if pos != len(data) {
809+
c.recycleWritePacket()
807810
return vterrors.Errorf(vtrpcpb.Code_INTERNAL, "error building %v packet: got %v bytes expected %v", c.authPluginName, pos, len(data))
808811
}
809812
return c.writeEphemeralPacket()

go/mysql/conn.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -777,6 +777,7 @@ func (c *Conn) writeErrorPacket(errorCode uint16, sqlState string, format string
777777
sqlState = SSUnknownSQLState
778778
}
779779
if len(sqlState) != 5 {
780+
c.recycleWritePacket()
780781
panic("sqlState has to be 5 characters long")
781782
}
782783
pos = writeEOFString(data, pos, sqlState)

go/mysql/query.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1021,6 +1021,7 @@ func (c *Conn) writeColumnDefinition(field *querypb.Field, withDefaults bool) er
10211021
}
10221022

10231023
if pos != len(data) {
1024+
c.recycleWritePacket()
10241025
return vterrors.Errorf(vtrpc.Code_INTERNAL, "packing of column definition used %v bytes instead of %v", pos, len(data))
10251026
}
10261027

@@ -1051,6 +1052,7 @@ func (c *Conn) writeRow(row []sqltypes.Value) error {
10511052
}
10521053

10531054
if pos != length {
1055+
c.recycleWritePacket()
10541056
return vterrors.Errorf(vtrpc.Code_INTERNAL, "packet row: got %v bytes but expected %v", pos, length)
10551057
}
10561058

@@ -1235,6 +1237,7 @@ func (c *Conn) writeBinaryRow(fields []*querypb.Field, row []sqltypes.Value) err
12351237
}
12361238

12371239
if pos != length {
1240+
c.recycleWritePacket()
12381241
return fmt.Errorf("internal error packet row: got %v bytes but expected %v", pos, length)
12391242
}
12401243

go/mysql/server.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -713,6 +713,7 @@ func (c *Conn) writeHandshakeV10(serverVersion string, authServer AuthServer, en
713713
// auth method is also mysql_native_password or caching_sha2_password.
714714
pluginData, err := NewSalt()
715715
if err != nil {
716+
c.recycleWritePacket()
716717
return nil, err
717718
}
718719
// Plugin data is always defined as having a trailing NULL
@@ -751,6 +752,7 @@ func (c *Conn) writeHandshakeV10(serverVersion string, authServer AuthServer, en
751752

752753
// Sanity check.
753754
if pos != len(data) {
755+
c.recycleWritePacket()
754756
return nil, vterrors.Errorf(vtrpc.Code_INTERNAL, "error building Handshake packet: got %v bytes expected %v", pos, len(data))
755757
}
756758

@@ -961,6 +963,7 @@ func (c *Conn) writeAuthSwitchRequest(pluginName string, pluginData []byte) erro
961963

962964
// Sanity check.
963965
if pos != len(data) {
966+
c.recycleWritePacket()
964967
return vterrors.Errorf(vtrpc.Code_INTERNAL, "error building AuthSwitchRequestPacket packet: got %v bytes expected %v", pos, len(data))
965968
}
966969
return c.writeEphemeralPacket()

0 commit comments

Comments
 (0)