diff --git a/src/MySQL_Generic_Connection.h b/src/MySQL_Generic_Connection.h index abe0a724..44a70e88 100644 --- a/src/MySQL_Generic_Connection.h +++ b/src/MySQL_Generic_Connection.h @@ -67,12 +67,7 @@ class MySQL_Connection : public MySQL_Packet virtual ~MySQL_Connection() { - if (server_version) - { - MYSQL_LOGDEBUG("Free server_version"); - - free(server_version); - } + this->close(); }; bool connect(const IPAddress& server, const uint16_t& port, char *user, char *password, char *db = NULL); diff --git a/src/MySQL_Generic_Connection_Impl.h b/src/MySQL_Generic_Connection_Impl.h index 2770bca4..9b180753 100644 --- a/src/MySQL_Generic_Connection_Impl.h +++ b/src/MySQL_Generic_Connection_Impl.h @@ -153,7 +153,10 @@ bool MySQL_Connection::connect(const char *hostname, const uint16_t& port, char } if (server_version) - free(server_version); // don't need it anymore + { + free(server_version); // don't need it anymore + server_version = NULL; + } return returnVal; } @@ -236,7 +239,10 @@ Connection_Result MySQL_Connection::connectNonBlocking(const char *hostname, con } if (server_version) - free(server_version); // don't need it anymore + { + free(server_version); // don't need it anymore + server_version = NULL; + } return returnVal; } diff --git a/src/MySQL_Generic_Packet.h b/src/MySQL_Generic_Packet.h index 6ef3ff28..369572f4 100644 --- a/src/MySQL_Generic_Packet.h +++ b/src/MySQL_Generic_Packet.h @@ -94,6 +94,12 @@ class MySQL_Packet free(buffer); } + if (server_version) + { + MYSQL_LOGDEBUG("Free server_version"); + + free(server_version); + } }; bool complete_handshake(char *user, char *password); diff --git a/src/MySQL_Generic_Packet_Impl.h b/src/MySQL_Generic_Packet_Impl.h index 27dff85b..bac0c339 100644 --- a/src/MySQL_Generic_Packet_Impl.h +++ b/src/MySQL_Generic_Packet_Impl.h @@ -72,6 +72,7 @@ MySQL_Packet::MySQL_Packet(Client *client_instance) { buffer = NULL; + server_version = NULL; client = client_instance; } @@ -441,8 +442,15 @@ void MySQL_Packet::parse_handshake_packet() i++; } while (buffer[i - 1] != 0x00); - server_version = (char *) malloc(i - 5); - strncpy(server_version, (char *) &buffer[5], i - 5); + if (i>5) + { + server_version = (char *) malloc(i - 5); + if (server_version) + { + strncpy(server_version, (char *) &buffer[5], i - 5); + server_version[i-5-1]=0; + } + } // Capture the first 8 characters of seed i += 4; // Skip thread id