From ce61341b98e20cfa6a8a9e1b38392f05f7a91695 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Canna=C3=B2?= Date: Thu, 29 Dec 2016 18:47:47 +0000 Subject: [PATCH] Handle backquote in USE command #857 Ported from 1.3.2 Conflicts: lib/MySQL_Session.cpp --- lib/MySQL_Session.cpp | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/lib/MySQL_Session.cpp b/lib/MySQL_Session.cpp index c5e4a7c7f..8b6d9b067 100644 --- a/lib/MySQL_Session.cpp +++ b/lib/MySQL_Session.cpp @@ -2950,7 +2950,17 @@ void MySQL_Session::handler___status_WAITING_CLIENT_DATA___STATE_SLEEP___MYSQL_C proxy_debug(PROXY_DEBUG_MYSQL_COM, 5, "Got COM_QUERY with USE dbname\n"); if (admin==false) { __sync_fetch_and_add(&MyHGM->status.frontend_use_db, 1); - client_myds->myconn->userinfo->set_schemaname((char *)pkt->ptr+sizeof(mysql_hdr)+5,pkt->size-sizeof(mysql_hdr)-5); + char *schemaname=strndup((char *)pkt->ptr+sizeof(mysql_hdr)+5,pkt->size-sizeof(mysql_hdr)-5); + char *schemanameptr=schemaname; + //remove leading spaces + while(isspace((unsigned char)*schemanameptr)) schemanameptr++; + // handle cases like "USE `schemaname` + if(schemanameptr[0]=='`' && schemanameptr[strlen(schemanameptr)-1]=='`') { + schemanameptr[strlen(schemanameptr)-1]='\0'; + schemanameptr++; + } + client_myds->myconn->userinfo->set_schemaname(schemanameptr,strlen(schemanameptr)); + free(schemaname); l_free(pkt->size,pkt->ptr); client_myds->setDSS_STATE_QUERY_SENT_NET(); unsigned int nTrx=NumActiveTransactions();