aboutsummaryrefslogtreecommitdiff
path: root/src/server/shared/Database/PreparedStatement.cpp
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2014-11-09 16:57:56 +0100
committerShauren <shauren.trinity@gmail.com>2014-11-09 16:57:56 +0100
commit543bea32e16bbe317171d24888a5f0c751ea19e8 (patch)
tree3475ec61c0812ab9a6025cea6b4e4cd8696b2757 /src/server/shared/Database/PreparedStatement.cpp
parent18cce601b91e34b360a82a07365b6a3491a30ccb (diff)
Core/DBLayer: Fixed a few mismatched types and possible invalid memory access with aggregate fields in queries
Diffstat (limited to 'src/server/shared/Database/PreparedStatement.cpp')
-rw-r--r--src/server/shared/Database/PreparedStatement.cpp6
1 files changed, 5 insertions, 1 deletions
diff --git a/src/server/shared/Database/PreparedStatement.cpp b/src/server/shared/Database/PreparedStatement.cpp
index 1f036b5bf0a..3ea3c969a4c 100644
--- a/src/server/shared/Database/PreparedStatement.cpp
+++ b/src/server/shared/Database/PreparedStatement.cpp
@@ -72,6 +72,7 @@ void PreparedStatement::BindParameters()
break;
case TYPE_BINARY:
m_stmt->setBinary(i, statement_data[i].binary, false);
+ break;
case TYPE_NULL:
m_stmt->setNull(i);
break;
@@ -357,7 +358,7 @@ void MySQLPreparedStatement::setBinary(const uint8 index, const std::vector<uint
m_paramsSet[index] = true;
MYSQL_BIND* param = &m_bind[index];
size_t len = value.size();
- param->buffer_type = MYSQL_TYPE_VAR_STRING;
+ param->buffer_type = MYSQL_TYPE_BLOB;
delete [] static_cast<char *>(param->buffer);
param->buffer = new char[len];
param->buffer_length = len;
@@ -365,7 +366,10 @@ void MySQLPreparedStatement::setBinary(const uint8 index, const std::vector<uint
delete param->length;
param->length = new unsigned long(len);
if (isString)
+ {
*param->length -= 1;
+ param->buffer_type = MYSQL_TYPE_VAR_STRING;
+ }
memcpy(param->buffer, value.data(), len);
}