Commit 0d5290fc authored by lars@mysql.com's avatar lars@mysql.com

BUG#6239 V2: Since uint can be shorter than ulong on 64 bit platforms,

the comparision of "packet_len" (uint) and "len" (uint) with 
"packet_error"  (ulong) was always false.
parent 7d204799
...@@ -204,7 +204,7 @@ int Load_log_processor::load_old_format_file(NET* net, const char*server_fname, ...@@ -204,7 +204,7 @@ int Load_log_processor::load_old_format_file(NET* net, const char*server_fname,
for (;;) for (;;)
{ {
uint packet_len = my_net_read(net); ulong packet_len = my_net_read(net);
if (packet_len == 0) if (packet_len == 0)
{ {
if (my_net_write(net, "", 0) || net_flush(net)) if (my_net_write(net, "", 0) || net_flush(net))
...@@ -226,7 +226,13 @@ int Load_log_processor::load_old_format_file(NET* net, const char*server_fname, ...@@ -226,7 +226,13 @@ int Load_log_processor::load_old_format_file(NET* net, const char*server_fname,
return -1; return -1;
} }
if (my_write(file, (byte*) net->read_pos, packet_len,MYF(MY_WME|MY_NABP))) if (packet_len > UINT_MAX)
{
sql_print_error("Illegal length of packet read from net");
return -1;
}
if (my_write(file, (byte*) net->read_pos,
(uint) packet_len, MYF(MY_WME|MY_NABP)))
return -1; return -1;
} }
...@@ -747,7 +753,8 @@ static int dump_remote_log_entries(const char* logname) ...@@ -747,7 +753,8 @@ static int dump_remote_log_entries(const char* logname)
{ {
char buf[128]; char buf[128];
char last_db[FN_REFLEN+1] = ""; char last_db[FN_REFLEN+1] = "";
uint len, logname_len; ulong len;
uint logname_len;
NET* net; NET* net;
int old_format; int old_format;
int error= 0; int error= 0;
...@@ -770,7 +777,15 @@ static int dump_remote_log_entries(const char* logname) ...@@ -770,7 +777,15 @@ static int dump_remote_log_entries(const char* logname)
*/ */
int4store(buf, (uint32)start_position); int4store(buf, (uint32)start_position);
int2store(buf + BIN_LOG_HEADER_SIZE, binlog_flags); int2store(buf + BIN_LOG_HEADER_SIZE, binlog_flags);
logname_len = (uint) strlen(logname);
size_s tlen = strlen(logname);
if (tlen > UINT_MAX)
{
fprintf(stderr,"Log name too long\n");
error= 1;
goto err;
}
logname_len = (uint) tlen;
int4store(buf + 6, 0); int4store(buf + 6, 0);
memcpy(buf + 10, logname, logname_len); memcpy(buf + 10, logname, logname_len);
if (simple_command(mysql, COM_BINLOG_DUMP, buf, logname_len + 10, 1)) if (simple_command(mysql, COM_BINLOG_DUMP, buf, logname_len + 10, 1))
......
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