Commit e56742d7 authored by unknown's avatar unknown
Browse files

Merge gkodinov@bk-internal.mysql.com:/home/bk/mysql-4.1-opt

into  rakia.gmz:/home/kgeorge/mysql/autopush/B19216-4.1-opt

parents 5cad819c f53af7b8
Loading
Loading
Loading
Loading
+18 −0
Original line number Diff line number Diff line
@@ -33,3 +33,21 @@
#
--exec echo 'help' | $MYSQL   >  $MYSQLTEST_VARDIR/tmp/bug20328.tmp
--exec echo 'help ' | $MYSQL  >  $MYSQLTEST_VARDIR/tmp/bug20328.tmp

#
# Bug #19216: Client crashes on long SELECT
#
--exec echo "select" > $MYSQLTEST_VARDIR/tmp/b19216.tmp
# 3400 * 20 makes 68000 columns that is more than the max number that can fit 
# in a 16 bit number.
let $i= 3400;
while ($i)
{
  --exec echo "'a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a'," >> $MYSQLTEST_VARDIR/tmp/b19216.tmp
  dec $i;
}

--exec echo "'b';" >> $MYSQLTEST_VARDIR/tmp/b19216.tmp
--disable_query_log
--exec $MYSQL < $MYSQLTEST_VARDIR/tmp/b19216.tmp >/dev/null
--enable_query_log
+2 −0
Original line number Diff line number Diff line
@@ -1173,6 +1173,8 @@ unpack_fields(MYSQL_DATA *data,MEM_ROOT *alloc,uint fields,
    for (row=data->data; row ; row = row->next,field++)
    {
      uchar *pos;
      /* fields count may be wrong */
      DBUG_ASSERT ((field - result) < fields);
      cli_fetch_lengths(&lengths[0], row->data, default_value ? 8 : 7);
      field->catalog  = strdup_root(alloc,(char*) row->data[0]);
      field->db       = strdup_root(alloc,(char*) row->data[1]);
+9 −9
Original line number Diff line number Diff line
@@ -43,7 +43,7 @@ bool Protocol_prep::net_store_data(const char *from, uint length)
      packet->realloc(packet_length+9+length))
    return 1;
  char *to=(char*) net_store_length((char*) packet->ptr()+packet_length,
				    (ulonglong) length);
				    length);
  memcpy(to,from,length);
  packet->length((uint) (to+length-packet->ptr()));
  return 0;
@@ -297,8 +297,8 @@ send_ok(THD *thd, ha_rows affected_rows, ulonglong id, const char *message)
    DBUG_VOID_RETURN;

  buff[0]=0;					// No fields
  pos=net_store_length(buff+1,(ulonglong) affected_rows);
  pos=net_store_length(pos, (ulonglong) id);
  pos=net_store_length(buff+1,affected_rows);
  pos=net_store_length(pos, id);
  if (thd->client_capabilities & CLIENT_PROTOCOL_41)
  {
    DBUG_PRINT("info",
@@ -416,7 +416,7 @@ bool send_old_password_request(THD *thd)
  ulonglong for bigger numbers.
*/

char *net_store_length(char *pkg, uint length)
static char *net_store_length_fast(char *pkg, uint length)
{
  uchar *packet=(uchar*) pkg;
  if (length < 251)
@@ -439,7 +439,7 @@ char *net_store_length(char *pkg, uint length)

char *net_store_data(char *to,const char *from, uint length)
{
  to=net_store_length(to,length);
  to=net_store_length_fast(to,length);
  memcpy(to,from,length);
  return to+length;
}
@@ -448,7 +448,7 @@ char *net_store_data(char *to,int32 from)
{
  char buff[20];
  uint length=(uint) (int10_to_str(from,buff,10)-buff);
  to=net_store_length(to,length);
  to=net_store_length_fast(to,length);
  memcpy(to,buff,length);
  return to+length;
}
@@ -457,7 +457,7 @@ char *net_store_data(char *to,longlong from)
{
  char buff[22];
  uint length=(uint) (longlong10_to_str(from,buff,10)-buff);
  to=net_store_length(to,length);
  to=net_store_length_fast(to,length);
  memcpy(to,buff,length);
  return to+length;
}
@@ -520,7 +520,7 @@ bool Protocol::send_fields(List<Item> *list, uint flag)

  if (flag & 1)
  {				// Packet with number of elements
    char *pos=net_store_length(buff, (uint) list->elements);
    char *pos=net_store_length(buff, list->elements);
    (void) my_net_write(&thd->net, buff,(uint) (pos-buff));
  }

@@ -648,7 +648,7 @@ bool Protocol::send_records_num(List<Item> *list, ulonglong records)
{
  char *pos;
  char buff[20];
  pos=net_store_length(buff, (uint) list->elements);
  pos=net_store_length(buff, list->elements);
  pos=net_store_length(pos, records);
  return my_net_write(&thd->net, buff,(uint) (pos-buff));
}
+0 −1
Original line number Diff line number Diff line
@@ -177,7 +177,6 @@ void send_ok(THD *thd, ha_rows affected_rows=0L, ulonglong id=0L,
	     const char *info=0);
void send_eof(THD *thd, bool no_flush=0);
bool send_old_password_request(THD *thd);
char *net_store_length(char *packet,uint length);
char *net_store_data(char *to,const char *from, uint length);
char *net_store_data(char *to,int32 from);
char *net_store_data(char *to,longlong from);