Fixing some bugs in client - server protocol and adding a feature

that connection does not close in the case when client sends a 
buffer larger then max_allowed_packet.
parent 5c0bd57b
...@@ -469,6 +469,7 @@ static void my_net_skip_rest(NET *net, uint32 remain, thr_alarm_t *alarmed) ...@@ -469,6 +469,7 @@ static void my_net_skip_rest(NET *net, uint32 remain, thr_alarm_t *alarmed)
ALARM alarm_buff; ALARM alarm_buff;
uint retry_count=0; uint retry_count=0;
my_bool old_mode; my_bool old_mode;
uint32 old=remain;
if (!thr_alarm_in_use(&alarmed)) if (!thr_alarm_in_use(&alarmed))
{ {
...@@ -490,6 +491,12 @@ static void my_net_skip_rest(NET *net, uint32 remain, thr_alarm_t *alarmed) ...@@ -490,6 +491,12 @@ static void my_net_skip_rest(NET *net, uint32 remain, thr_alarm_t *alarmed)
return; return;
} }
remain -= (uint32) length; remain -= (uint32) length;
if (!remain && old==MAX_THREE_BYTES &&
(length=vio_read(net->vio,(char*) net->buff,NET_HEADER_SIZE)))
{
old=remain= uint3korr(net->buff);
net->pkt_nr++;
}
statistic_add(bytes_received,length,&LOCK_bytes_received); statistic_add(bytes_received,length,&LOCK_bytes_received);
} }
} }
...@@ -647,11 +654,19 @@ my_real_read(NET *net, ulong *complen) ...@@ -647,11 +654,19 @@ my_real_read(NET *net, ulong *complen)
{ {
if (net_realloc(net,helping)) if (net_realloc(net,helping))
{ {
#ifdef MYSQL_SERVER
#ifndef NO_ALARM #ifndef NO_ALARM
if (i == 1) if (net->compress)
my_net_skip_rest(net, (uint32) len, &alarmed); {
len= packet_error;
goto end;
}
my_net_skip_rest(net, (uint32) len, &alarmed);
len=0;
#endif
#else
len= packet_error; /* Return error */
#endif #endif
len= packet_error; /* Return error */
goto end; goto end;
} }
} }
......
...@@ -884,6 +884,12 @@ bool do_command(THD *thd) ...@@ -884,6 +884,12 @@ bool do_command(THD *thd)
vio_description(net->vio) )); vio_description(net->vio) ));
return TRUE; return TRUE;
} }
else if (!packet_length)
{
send_error(net,net->last_errno,NullS);
net->error=0;
DBUG_RETURN(FALSE);
}
else else
{ {
packet=(char*) net->read_pos; packet=(char*) net->read_pos;
......
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