diff --git a/lib/MySQL_Session.cpp b/lib/MySQL_Session.cpp index f74743b2b..44de7ea14 100644 --- a/lib/MySQL_Session.cpp +++ b/lib/MySQL_Session.cpp @@ -1201,7 +1201,8 @@ bool MySQL_Session::handler_special_queries(PtrSize_t *pkt) { } } - if (pkt->size==SELECT_VERSION_COMMENT_LEN+5 && strncmp((char *)SELECT_VERSION_COMMENT,(char *)pkt->ptr+5,pkt->size-5)==0) { + //handle 2564 + if (pkt->size==SELECT_VERSION_COMMENT_LEN+5 && *(char *)(pkt->ptr+4)==(char)0x03 && strncmp((char *)SELECT_VERSION_COMMENT,(char *)pkt->ptr+5,pkt->size-5)==0) { // FIXME: this doesn't return AUTOCOMMIT or IN_TRANS PtrSize_t pkt_2; if (deprecate_eof_active) { @@ -6201,7 +6202,7 @@ bool MySQL_Session::handler___status_WAITING_CLIENT_DATA___STATE_SLEEP___MYSQL_C // handle case #1797 // handle case #2564 - if ((pkt->size==SELECT_CONNECTION_ID_LEN+5 && *(char *)(pkt->ptr+4)!=(char)0x16 && strncasecmp((char *)SELECT_CONNECTION_ID,(char *)pkt->ptr+5,pkt->size-5)==0)) { + if ((pkt->size==SELECT_CONNECTION_ID_LEN+5 && *(char *)(pkt->ptr+4)==(char)0x03 && strncasecmp((char *)SELECT_CONNECTION_ID,(char *)pkt->ptr+5,pkt->size-5)==0)) { char buf[32]; char buf2[32]; sprintf(buf,"%u",thread_session_id); @@ -6268,15 +6269,15 @@ bool MySQL_Session::handler___status_WAITING_CLIENT_DATA___STATE_SLEEP___MYSQL_C // if we reached here, we don't know the right backend // we try to determine if it is a simple "SELECT LAST_INSERT_ID()" or "SELECT @@IDENTITY" and we return mysql->last_insert_id - + //handle 2564 if ( - (pkt->size==SELECT_LAST_INSERT_ID_LEN+5 && strncasecmp((char *)SELECT_LAST_INSERT_ID,(char *)pkt->ptr+5,pkt->size-5)==0) + (pkt->size==SELECT_LAST_INSERT_ID_LEN+5 && *(char *)(pkt->ptr+4)==(char)0x03 && strncasecmp((char *)SELECT_LAST_INSERT_ID,(char *)pkt->ptr+5,pkt->size-5)==0) || - (pkt->size==SELECT_LAST_INSERT_ID_LIMIT1_LEN+5 && strncasecmp((char *)SELECT_LAST_INSERT_ID_LIMIT1,(char *)pkt->ptr+5,pkt->size-5)==0) + (pkt->size==SELECT_LAST_INSERT_ID_LIMIT1_LEN+5 && *(char *)(pkt->ptr+4)==(char)0x03 && strncasecmp((char *)SELECT_LAST_INSERT_ID_LIMIT1,(char *)pkt->ptr+5,pkt->size-5)==0) || - (pkt->size==SELECT_VARIABLE_IDENTITY_LEN+5 && strncasecmp((char *)SELECT_VARIABLE_IDENTITY,(char *)pkt->ptr+5,pkt->size-5)==0) + (pkt->size==SELECT_VARIABLE_IDENTITY_LEN+5 && *(char *)(pkt->ptr+4)==(char)0x03 && strncasecmp((char *)SELECT_VARIABLE_IDENTITY,(char *)pkt->ptr+5,pkt->size-5)==0) || - (pkt->size==SELECT_VARIABLE_IDENTITY_LIMIT1_LEN+5 && strncasecmp((char *)SELECT_VARIABLE_IDENTITY_LIMIT1,(char *)pkt->ptr+5,pkt->size-5)==0) + (pkt->size==SELECT_VARIABLE_IDENTITY_LIMIT1_LEN+5 && *(char *)(pkt->ptr+4)==(char)0x03 && strncasecmp((char *)SELECT_VARIABLE_IDENTITY_LIMIT1,(char *)pkt->ptr+5,pkt->size-5)==0) ) { char buf[32]; sprintf(buf,"%llu",last_insert_id);