diff options
author | Sven Sandberg <sven@mysql.com> | 2008-12-29 17:04:10 +0100 |
---|---|---|
committer | Sven Sandberg <sven@mysql.com> | 2008-12-29 17:04:10 +0100 |
commit | ba835f89ba4a07344322765c27c424a2ea96f6ee (patch) | |
tree | 140102f9249f7ff4d6beb0772df2511a8ec0abc8 /sql/log_event.h | |
parent | 47c0ec508467b4941e6e388e33dc688b7247befb (diff) | |
download | mariadb-git-ba835f89ba4a07344322765c27c424a2ea96f6ee.tar.gz |
BUG#40482: server/mysqlbinlog crashes when reading invalid Incident_log_event
Problem: When an Incident_log_event contains a bad incident number on disk,
the server crashes with an assertion.
Fix: Don't validate input with assertions. Use errors.
mysql-test/include/cleanup_fake_relay_log.inc:
Added auxiliary file to restore things that setup_fake_relay_log.inc did.
mysql-test/include/setup_fake_relay_log.inc:
Added auxiliary file to setup replication from an existing relay log.
mysql-test/std_data/bug40482-bin.000001:
Binlog file for rpl.rpl_binlog_corruption
mysql-test/suite/rpl/t/rpl_binlog_corruption.test:
New test file.
sql/log_event.cc:
Check that the incident number is correct at the time the event is constructed.
Do not assert it at the time it is printed.
sql/log_event.h:
Incident_log_event::is_valid() should verify that the incident number is valid.
sql/rpl_constants.h:
Incident numbers should be hard-coded, since they may appear in files.
Diffstat (limited to 'sql/log_event.h')
-rw-r--r-- | sql/log_event.h | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/sql/log_event.h b/sql/log_event.h index 3c109b798d3..db14341b51d 100644 --- a/sql/log_event.h +++ b/sql/log_event.h @@ -3870,7 +3870,10 @@ public: virtual Log_event_type get_type_code() { return INCIDENT_EVENT; } - virtual bool is_valid() const { return 1; } + virtual bool is_valid() const + { + return m_incident > INCIDENT_NONE && m_incident < INCIDENT_COUNT; + } virtual int get_data_size() { return INCIDENT_HEADER_LEN + 1 + m_message.length; } |