diff --git a/src/console_commands.cpp b/src/console_commands.cpp index a83ea91..3aca7fb 100644 --- a/src/console_commands.cpp +++ b/src/console_commands.cpp @@ -380,7 +380,7 @@ void ConsoleCommands::process_input(std::string& command, const char* data, uint command[k] = '\0'; if (check_cookie && ((k <= m_cookie.length()) || (memcmp(command.data(), m_cookie.data(), m_cookie.length()) != 0))) { - LOGWARN(4, "cookie check failed, skipping command " << command); + LOGWARN(4, "cookie check failed, skipping command " << log::MaskNonASCII(command)); } else { if (check_cookie) { @@ -410,7 +410,7 @@ void ConsoleCommands::process_input(std::string& command, const char* data, uint } if (!c->name.len) { - LOGWARN(0, "Unknown command " << command.c_str()); + LOGWARN(0, "Unknown command " << log::MaskNonASCII(command)); do_help(nullptr, nullptr); } } diff --git a/src/log.h b/src/log.h index b2122ae..8aa6b07 100644 --- a/src/log.h +++ b/src/log.h @@ -449,12 +449,37 @@ struct EscapedString } } + FORCEINLINE operator const std::string&() const { return m_data; } + +private: std::string m_data; }; template<> struct log::Stream::Entry { - static FORCEINLINE void put(const EscapedString& value, Stream* wrapper) { *wrapper << value.m_data; } + static FORCEINLINE void put(const EscapedString& value, Stream* wrapper) { *wrapper << value; } +}; + +struct MaskNonASCII +{ + explicit FORCEINLINE MaskNonASCII(const std::string& data, char mask_character = '?') : m_data(data) + { + for (char& c : m_data) { + if ((c < 32) || (c >= 127)) { + c = mask_character; + } + } + } + + FORCEINLINE operator const std::string&() const { return m_data; } + +private: + std::string m_data; +}; + +template<> struct log::Stream::Entry +{ + static FORCEINLINE void put(const MaskNonASCII& value, Stream* wrapper) { *wrapper << value; } }; template