Fix parse error packet on event

This commit is contained in:
zhang2014 2020-09-15 23:26:13 +08:00
parent 30352f096d
commit 0c06ccc35e

View File

@ -803,20 +803,20 @@ namespace MySQLReplication
void MySQLFlavor::readPayloadImpl(ReadBuffer & payload) void MySQLFlavor::readPayloadImpl(ReadBuffer & payload)
{ {
MySQLBinlogEventReadBuffer event_payload(payload); UInt16 header = static_cast<unsigned char>(*payload.position());
UInt16 header = static_cast<unsigned char>(*event_payload.position());
switch (header) switch (header)
{ {
case PACKET_EOF: case PACKET_EOF:
throw ReplicationError("Master maybe lost", ErrorCodes::UNKNOWN_EXCEPTION); throw ReplicationError("Master maybe lost", ErrorCodes::UNKNOWN_EXCEPTION);
case PACKET_ERR: case PACKET_ERR:
ERRPacket err; ERRPacket err;
err.readPayloadWithUnpacked(event_payload); err.readPayloadWithUnpacked(payload);
throw ReplicationError(err.error_message, ErrorCodes::UNKNOWN_EXCEPTION); throw ReplicationError(err.error_message, ErrorCodes::UNKNOWN_EXCEPTION);
} }
// skip the header flag. // skip the header flag.
event_payload.ignore(1); payload.ignore(1);
MySQLBinlogEventReadBuffer event_payload(payload);
EventType event_type = static_cast<EventType>(*(event_payload.position() + 4)); EventType event_type = static_cast<EventType>(*(event_payload.position() + 4));
switch (event_type) switch (event_type)
{ {