Commit 1186229f authored by unknown's avatar unknown
Browse files

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 9afd24f0
Loading
Loading
Loading
Loading
+19 −4
Original line number Diff line number Diff line
@@ -204,7 +204,7 @@ int Load_log_processor::load_old_format_file(NET* net, const char*server_fname,
  
  for (;;)
  {
    uint packet_len = my_net_read(net);
    ulong packet_len = my_net_read(net);
    if (packet_len == 0)
    {
      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,
      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;
  }
  
@@ -747,7 +753,8 @@ static int dump_remote_log_entries(const char* logname)
{
  char buf[128];
  char last_db[FN_REFLEN+1] = "";
  uint len, logname_len;
  ulong len;
  uint logname_len;
  NET* net;
  int old_format;
  int error= 0;
@@ -770,7 +777,15 @@ static int dump_remote_log_entries(const char* logname)
  */
  int4store(buf, (uint32)start_position);
  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);
  memcpy(buf + 10, logname, logname_len);
  if (simple_command(mysql, COM_BINLOG_DUMP, buf, logname_len + 10, 1))