diff --git a/binlog/event_query.go b/binlog/event_query.go index efe8a46..9dc2c6a 100644 --- a/binlog/event_query.go +++ b/binlog/event_query.go @@ -24,8 +24,16 @@ func (e *QueryEvent) Decode(connBuff []byte) { schemaLen := int(buf.ReadUint8()) e.ErrorCode = buf.ReadUint16() statusVarLen := int(buf.ReadUint8()) + + e.StatusVars = make([]byte, statusVarLen) copy(e.StatusVars, buf.Read(statusVarLen)) - copy(e.Schema, buf.Read(schemaLen)) + + // FIXME: This is not by the spec but seem to work + // It could be there's an error somewhere and this byte skipping corrects it buf.Skip(1) // Always 0x00 - copy(e.Query, buf.Cur()) + e.Schema = make([]byte, schemaLen) + copy(e.Schema, buf.Read(schemaLen)) + + buf.Skip(1) // Always 0x00 + e.Query = buf.Cur() } diff --git a/tools/buffer.go b/tools/buffer.go index ce68071..a6e40e8 100644 --- a/tools/buffer.go +++ b/tools/buffer.go @@ -37,7 +37,7 @@ func (b *Buffer) Read(n int) []byte { b.pos += n Debugf("Read %d bytes: %X\n", n, b.data[b.pos-n:b.pos]) - return b.data[b.pos-n:] + return b.data[b.pos-n : b.pos] } // Cur returns remaining unread buffer.