game: make log escaping safe before SQL connect
This commit is contained in:
@@ -45,6 +45,33 @@ std::string LogManager::EscapeForQuery(const char* text)
|
|||||||
return {};
|
return {};
|
||||||
|
|
||||||
const size_t text_length = strlen(text);
|
const size_t text_length = strlen(text);
|
||||||
|
|
||||||
|
auto append_escaped_char = [](std::string& out, char ch)
|
||||||
|
{
|
||||||
|
switch (ch)
|
||||||
|
{
|
||||||
|
case '\0': out += "\\0"; break;
|
||||||
|
case '\n': out += "\\n"; break;
|
||||||
|
case '\r': out += "\\r"; break;
|
||||||
|
case '\\': out += "\\\\"; break;
|
||||||
|
case '\'': out += "\\'"; break;
|
||||||
|
case '"': out += "\\\""; break;
|
||||||
|
case '\b': out += "\\b"; break;
|
||||||
|
case '\t': out += "\\t"; break;
|
||||||
|
case '\032': out += "\\Z"; break;
|
||||||
|
default: out.push_back(ch); break;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
if (!m_bIsConnect)
|
||||||
|
{
|
||||||
|
std::string escaped;
|
||||||
|
escaped.reserve(text_length * 2);
|
||||||
|
for (size_t i = 0; i < text_length; ++i)
|
||||||
|
append_escaped_char(escaped, text[i]);
|
||||||
|
return escaped;
|
||||||
|
}
|
||||||
|
|
||||||
std::string escaped(text_length * 2 + 1, '\0');
|
std::string escaped(text_length * 2 + 1, '\0');
|
||||||
const size_t escaped_length = m_sql.EscapeString(escaped.data(), escaped.size(), text, text_length);
|
const size_t escaped_length = m_sql.EscapeString(escaped.data(), escaped.size(), text, text_length);
|
||||||
escaped.resize(escaped_length);
|
escaped.resize(escaped_length);
|
||||||
|
|||||||
Reference in New Issue
Block a user