Commit 847bab8e authored by Michael Widenius's avatar Michael Widenius

Fix for Bug #48357 SHOW BINLOG EVENTS: Wrong offset or I/O error

sql/log_event.cc:
  gcc 4.4.1 assumes that variables that you cast away will not change (strict-aliasing)
  The symptom was that mysql-test-run binlog.binglog_database got errors in the log
parent 069eec35
...@@ -2133,7 +2133,7 @@ void Query_log_event::pack_info(Protocol *protocol) ...@@ -2133,7 +2133,7 @@ void Query_log_event::pack_info(Protocol *protocol)
/** /**
Utility function for the next method (Query_log_event::write()) . Utility function for the next method (Query_log_event::write()) .
*/ */
static void write_str_with_code_and_len(char **dst, const char *src, static void write_str_with_code_and_len(uchar **dst, const char *src,
int len, uint code) int len, uint code)
{ {
/* /*
...@@ -2143,7 +2143,7 @@ static void write_str_with_code_and_len(char **dst, const char *src, ...@@ -2143,7 +2143,7 @@ static void write_str_with_code_and_len(char **dst, const char *src,
DBUG_ASSERT(len <= 255); DBUG_ASSERT(len <= 255);
DBUG_ASSERT(src); DBUG_ASSERT(src);
*((*dst)++)= code; *((*dst)++)= code;
*((*dst)++)= (uchar) len; *((*dst)++)= len;
bmove(*dst, src, len); bmove(*dst, src, len);
(*dst)+= len; (*dst)+= len;
} }
...@@ -2229,7 +2229,7 @@ bool Query_log_event::write(IO_CACHE* file) ...@@ -2229,7 +2229,7 @@ bool Query_log_event::write(IO_CACHE* file)
} }
if (catalog_len) // i.e. this var is inited (false for 4.0 events) if (catalog_len) // i.e. this var is inited (false for 4.0 events)
{ {
write_str_with_code_and_len((char **)(&start), write_str_with_code_and_len(&start,
catalog, catalog_len, Q_CATALOG_NZ_CODE); catalog, catalog_len, Q_CATALOG_NZ_CODE);
/* /*
In 5.0.x where x<4 masters we used to store the end zero here. This was In 5.0.x where x<4 masters we used to store the end zero here. This was
...@@ -2267,7 +2267,7 @@ bool Query_log_event::write(IO_CACHE* file) ...@@ -2267,7 +2267,7 @@ bool Query_log_event::write(IO_CACHE* file)
{ {
/* In the TZ sys table, column Name is of length 64 so this should be ok */ /* In the TZ sys table, column Name is of length 64 so this should be ok */
DBUG_ASSERT(time_zone_len <= MAX_TIME_ZONE_NAME_LENGTH); DBUG_ASSERT(time_zone_len <= MAX_TIME_ZONE_NAME_LENGTH);
write_str_with_code_and_len((char **)(&start), write_str_with_code_and_len(&start,
time_zone_str, time_zone_len, Q_TIME_ZONE_CODE); time_zone_str, time_zone_len, Q_TIME_ZONE_CODE);
} }
if (lc_time_names_number) if (lc_time_names_number)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment