Fix for bug #601 , SET SESSION character_set_server

v1.2.0
René Cannaò 10 years ago
parent 454713513b
commit 3de224d0df

@ -529,6 +529,27 @@ bool MySQL_Session::handler_special_queries(PtrSize_t *pkt) {
l_free(pkt->size,pkt->ptr);
return true;
}
if ( (pkt->size < 60) && (pkt->size > 38) && (strncasecmp((char *)"SET SESSION character_set_server",(char *)pkt->ptr+5,32)==0) ) { // issue #601
char *idx=NULL;
char *p=(char *)pkt->ptr+37;
idx=(char *)memchr(p,'=',pkt->size-37);
//idx=memchr(pkt->ptr+37,'=',pkt->size-37);
if (idx) { // we found =
PtrSize_t pkt_2;
pkt_2.size=5+strlen((char *)"SET NAMES ")+pkt->size-1-(idx-(char *)pkt->ptr);
pkt_2.ptr=l_alloc(pkt_2.size);
mysql_hdr Hdr;
memcpy(&Hdr,pkt->ptr,sizeof(mysql_hdr));
Hdr.pkt_length=pkt_2.size-5;
memcpy((char *)pkt_2.ptr+5,(char *)pkt->ptr+5,1);
memcpy(pkt_2.ptr,&Hdr,sizeof(mysql_hdr));
strcpy((char *)pkt_2.ptr+5,(char *)"SET NAMES ");
memcpy((char *)pkt_2.ptr+15,idx+1,pkt->size-1-(idx-(char *)pkt->ptr));
l_free(pkt->size,pkt->ptr);
pkt->size=pkt_2.size;
pkt->ptr=pkt_2.ptr;
}
}
if ( (pkt->size < 35) && (pkt->size > 15) && (strncasecmp((char *)"SET NAMES ",(char *)pkt->ptr+5,10)==0) ) {
char *unstripped=strndup((char *)pkt->ptr+15,pkt->size-15);
char *name=trim_spaces_and_quotes_in_place(unstripped);

Loading…
Cancel
Save