From 3de224d0dfd6b22000cbf5f9b3c0e1f22ffa60b8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Canna=C3=B2?= Date: Mon, 11 Jul 2016 21:18:02 +0000 Subject: [PATCH] Fix for bug #601 , SET SESSION character_set_server --- lib/MySQL_Session.cpp | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/lib/MySQL_Session.cpp b/lib/MySQL_Session.cpp index e628180dc..abb8170f3 100644 --- a/lib/MySQL_Session.cpp +++ b/lib/MySQL_Session.cpp @@ -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);