From 88f378e7ae7fad4a2f45e290926ba54d7a8aa4a1 Mon Sep 17 00:00:00 2001 From: Machiavelli Date: Mon, 13 Sep 2010 17:07:27 +0200 Subject: Core/DBLayer: Fix a memory leak in prepared statement parameter/result binds. Original author: raczman --HG-- branch : trunk --- src/server/shared/Database/PreparedStatement.cpp | 2 ++ src/server/shared/Database/QueryResult.cpp | 5 +++++ src/server/shared/Database/QueryResult.h | 6 ------ 3 files changed, 7 insertions(+), 6 deletions(-) (limited to 'src') diff --git a/src/server/shared/Database/PreparedStatement.cpp b/src/server/shared/Database/PreparedStatement.cpp index 0bc23648ac2..5f991f3a08a 100644 --- a/src/server/shared/Database/PreparedStatement.cpp +++ b/src/server/shared/Database/PreparedStatement.cpp @@ -289,6 +289,7 @@ void MySQLPreparedStatement::setString(const uint8 index, const char* value) MYSQL_BIND* param = &m_bind[index]; size_t len = strlen(value) + 1; param->buffer_type = MYSQL_TYPE_VAR_STRING; + delete [] static_cast(param->buffer); param->buffer = new char[len]; param->buffer_length = len; param->is_null_value = 0; @@ -300,6 +301,7 @@ void MySQLPreparedStatement::setString(const uint8 index, const char* value) void MySQLPreparedStatement::setValue(MYSQL_BIND* param, enum_field_types type, const void* value, uint32 len, bool isUnsigned) { param->buffer_type = type; + delete [] static_cast(param->buffer); param->buffer = new char[len]; param->buffer_length = 0; param->is_null_value = 0; diff --git a/src/server/shared/Database/QueryResult.cpp b/src/server/shared/Database/QueryResult.cpp index f2350df9e6d..61f41e75587 100644 --- a/src/server/shared/Database/QueryResult.cpp +++ b/src/server/shared/Database/QueryResult.cpp @@ -176,8 +176,13 @@ void ResultBind::FreeBindBuffer() void ResultBind::CleanUp() { + if (m_res) + mysql_free_result(m_res); + FreeBindBuffer(); mysql_stmt_free_result(m_stmt); + + delete[] m_rBind; } uint8 PreparedResultSet::GetUInt8(uint32 index) diff --git a/src/server/shared/Database/QueryResult.h b/src/server/shared/Database/QueryResult.h index 096c562b33c..5e7ff01f819 100755 --- a/src/server/shared/Database/QueryResult.h +++ b/src/server/shared/Database/QueryResult.h @@ -105,12 +105,6 @@ class ResultBind ~ResultBind() { - if (m_res) - mysql_free_result(m_res); // metadata - - if (!m_fieldCount) - return; - CleanUp(); // Clean up buffer } -- cgit v1.2.3