diff --git a/CMakeLists.txt b/CMakeLists.txt index cc82d5b7c..820b11829 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -3004,6 +3004,7 @@ foreach(target ${TARGETS_OWN}) if((CMAKE_VERSION VERSION_GREATER 3.1 OR CMAKE_VERSION VERSION_EQUAL 3.1)) set_property(TARGET ${target} PROPERTY CXX_STANDARD 17) set_property(TARGET ${target} PROPERTY CXX_STANDARD_REQUIRED ON) + set_property(TARGET ${target} PROPERTY CXX_EXTENSIONS OFF) endif() if(MSVC) diff --git a/src/base/log.cpp b/src/base/log.cpp index 11d39faf9..7b94e46e1 100644 --- a/src/base/log.cpp +++ b/src/base/log.cpp @@ -162,7 +162,7 @@ public: }; std::unique_ptr log_logger_android() { - return std::unique_ptr(new CLoggerAndroid()); + return std::make_unique(); } #else std::unique_ptr log_logger_android() @@ -199,7 +199,7 @@ public: std::unique_ptr log_logger_collection(std::vector> &&loggers) { - return std::unique_ptr(new CLoggerCollection(std::move(loggers))); + return std::make_unique(std::move(loggers)); } class CLoggerAsync : public ILogger @@ -261,7 +261,7 @@ public: std::unique_ptr log_logger_file(IOHANDLE logfile) { - return std::unique_ptr(new CLoggerAsync(logfile, false, true)); + return std::make_unique(logfile, false, true); } #if defined(CONF_FAMILY_WINDOWS) @@ -372,17 +372,17 @@ std::unique_ptr log_logger_stdout() // TODO: Only enable true color when COLORTERM contains "truecolor". // https://github.com/termstandard/colors/tree/65bf0cd1ece7c15fa33a17c17528b02c99f1ae0b#checking-for-colorterm const bool colors = getenv("NO_COLOR") == nullptr && isatty(STDOUT_FILENO); - return std::unique_ptr(new CLoggerAsync(io_stdout(), colors, false)); + return std::make_unique(io_stdout(), colors, false); #else if(GetFileType(GetStdHandle(STD_OUTPUT_HANDLE)) == FILE_TYPE_UNKNOWN) AttachConsole(ATTACH_PARENT_PROCESS); HANDLE pOutput = GetStdHandle(STD_OUTPUT_HANDLE); switch(GetFileType(pOutput)) { - case FILE_TYPE_CHAR: return std::unique_ptr(new CWindowsConsoleLogger(pOutput)); + case FILE_TYPE_CHAR: return std::make_unique(pOutput); case FILE_TYPE_PIPE: // fall through, writing to pipe works the same as writing to a file - case FILE_TYPE_DISK: return std::unique_ptr(new CWindowsFileLogger(pOutput)); - default: return std::unique_ptr(new CLoggerAsync(io_stdout(), false, false)); + case FILE_TYPE_DISK: return std::make_unique(pOutput); + default: return std::make_unique(io_stdout(), false, false); } #endif } @@ -400,7 +400,7 @@ public: }; std::unique_ptr log_logger_windows_debugger() { - return std::unique_ptr(new CLoggerWindowsDebugger()); + return std::make_unique(); } #else std::unique_ptr log_logger_windows_debugger() diff --git a/src/engine/client/client.cpp b/src/engine/client/client.cpp index a6c5d3ca8..0a273833c 100644 --- a/src/engine/client/client.cpp +++ b/src/engine/client/client.cpp @@ -2987,7 +2987,12 @@ void CClient::Run() } for(unsigned int i = 0; i < std::size(m_NetClient); i++) { - BindAddr.port = i == CONN_MAIN ? g_Config.m_ClPort : i == CONN_DUMMY ? g_Config.m_ClDummyPort : g_Config.m_ClContactPort; + int &PortRef = i == CONN_MAIN ? g_Config.m_ClPort : i == CONN_DUMMY ? g_Config.m_ClDummyPort : g_Config.m_ClContactPort; + if(PortRef < 1024) // Reject users setting ports that we don't want to use + { + PortRef = 0; + } + BindAddr.port = PortRef; while(BindAddr.port == 0 || !m_NetClient[i].Open(BindAddr)) { BindAddr.port = (secure_rand() % 64511) + 1024; diff --git a/src/engine/server/databases/mysql.cpp b/src/engine/server/databases/mysql.cpp index 7085de863..484c58652 100644 --- a/src/engine/server/databases/mysql.cpp +++ b/src/engine/server/databases/mysql.cpp @@ -713,7 +713,7 @@ std::unique_ptr CreateMysqlConnection( int Port, bool Setup) { - return std::unique_ptr(new CMysqlConnection(pDatabase, pPrefix, pUser, pPass, pIp, Port, Setup)); + return std::make_unique(pDatabase, pPrefix, pUser, pPass, pIp, Port, Setup); } #else int MysqlInit() diff --git a/src/engine/server/databases/sqlite.cpp b/src/engine/server/databases/sqlite.cpp index a13e8910b..99ea01a7e 100644 --- a/src/engine/server/databases/sqlite.cpp +++ b/src/engine/server/databases/sqlite.cpp @@ -387,5 +387,5 @@ bool CSqliteConnection::AddPoints(const char *pPlayer, int Points, char *pError, std::unique_ptr CreateSqliteConnection(const char *pFilename, bool Setup) { - return std::unique_ptr(new CSqliteConnection(pFilename, Setup)); + return std::make_unique(pFilename, Setup); } diff --git a/src/engine/server/server.cpp b/src/engine/server/server.cpp index b08a9f0f6..2e2b7c557 100644 --- a/src/engine/server/server.cpp +++ b/src/engine/server/server.cpp @@ -3906,7 +3906,7 @@ int main(int argc, const char **argv) dbg_msg("client", "failed to open '%s' for logging", g_Config.m_Logfile); } } - pEngine->SetAdditionalLogger(std::unique_ptr(new CServerLogger(pServer))); + pEngine->SetAdditionalLogger(std::make_unique(pServer)); // run the server dbg_msg("server", "starting..."); diff --git a/src/engine/shared/assertion_logger.cpp b/src/engine/shared/assertion_logger.cpp index 947d8271d..e43909681 100644 --- a/src/engine/shared/assertion_logger.cpp +++ b/src/engine/shared/assertion_logger.cpp @@ -77,5 +77,5 @@ std::unique_ptr CreateAssertionLogger(IStorage *pStorage, const char *p { char aAssertLogPath[IO_MAX_PATH_LENGTH]; pStorage->GetCompletePath(IStorage::TYPE_SAVE, "dumps/", aAssertLogPath, sizeof(aAssertLogPath)); - return std::unique_ptr(new CAssertionLogger(aAssertLogPath, pGameName)); + return std::make_unique(aAssertLogPath, pGameName); } diff --git a/src/engine/shared/config_variables.h b/src/engine/shared/config_variables.h index a6e9b9f54..f27003e23 100644 --- a/src/engine/shared/config_variables.h +++ b/src/engine/shared/config_variables.h @@ -131,9 +131,9 @@ MACRO_CONFIG_INT(InpMouseOld, inp_mouseold, 0, 0, 1, CFGFLAG_SAVE | CFGFLAG_CLIE MACRO_CONFIG_INT(InpTranslatedKeys, inp_translated_keys, 0, 0, 1, CFGFLAG_SAVE | CFGFLAG_CLIENT, "Translate keys before interpreting them, respects keyboard layouts") MACRO_CONFIG_INT(InpIgnoredModifiers, inp_ignored_modifiers, 0, 0, 65536, CFGFLAG_SAVE | CFGFLAG_CLIENT, "Ignored keyboard modifier mask") -MACRO_CONFIG_INT(ClPort, cl_port, 0, 0, 65535, CFGFLAG_SAVE | CFGFLAG_CLIENT, "Port to use for client connections to server (0 to choose a random port, requires a restart)") -MACRO_CONFIG_INT(ClDummyPort, cl_dummy_port, 0, 0, 65535, CFGFLAG_SAVE | CFGFLAG_CLIENT, "Port to use for dummy connections to server (0 to choose a random port, requires a restart)") -MACRO_CONFIG_INT(ClContactPort, cl_contact_port, 0, 0, 65535, CFGFLAG_SAVE | CFGFLAG_CLIENT, "Port to use for serverinfo connections to server (0 to choose a random port, requires a restart)") +MACRO_CONFIG_INT(ClPort, cl_port, 0, 0, 65535, CFGFLAG_SAVE | CFGFLAG_CLIENT, "Port to use for client connections to server (0 to choose a random port, 1024 or higher to set a manual port, requires a restart)") +MACRO_CONFIG_INT(ClDummyPort, cl_dummy_port, 0, 0, 65535, CFGFLAG_SAVE | CFGFLAG_CLIENT, "Port to use for dummy connections to server (0 to choose a random port, 1024 or higher to set a manual port, requires a restart)") +MACRO_CONFIG_INT(ClContactPort, cl_contact_port, 0, 0, 65535, CFGFLAG_SAVE | CFGFLAG_CLIENT, "Port to use for serverinfo connections to server (0 to choose a random port, 1024 or higher to set a manual port, requires a restart)") MACRO_CONFIG_STR(SvName, sv_name, 128, "unnamed server", CFGFLAG_SERVER, "Server name") MACRO_CONFIG_STR(Bindaddr, bindaddr, 128, "", CFGFLAG_CLIENT | CFGFLAG_SERVER | CFGFLAG_MASTER, "Address to bind the client/server to") diff --git a/src/engine/shared/http.h b/src/engine/shared/http.h index 5cc866c2f..3e5435bc6 100644 --- a/src/engine/shared/http.h +++ b/src/engine/shared/http.h @@ -154,14 +154,14 @@ public: inline std::unique_ptr HttpHead(const char *pUrl) { - std::unique_ptr pResult = std::unique_ptr(new CHttpRequest(pUrl)); + auto pResult = std::make_unique(pUrl); pResult->Head(); return pResult; } inline std::unique_ptr HttpGet(const char *pUrl) { - return std::unique_ptr(new CHttpRequest(pUrl)); + return std::make_unique(pUrl); } inline std::unique_ptr HttpGetFile(const char *pUrl, IStorage *pStorage, const char *pOutputFile, int StorageType) @@ -174,14 +174,14 @@ inline std::unique_ptr HttpGetFile(const char *pUrl, IStorage *pSt inline std::unique_ptr HttpPost(const char *pUrl, const unsigned char *pData, size_t DataLength) { - std::unique_ptr pResult = std::unique_ptr(new CHttpRequest(pUrl)); + auto pResult = std::make_unique(pUrl); pResult->Post(pData, DataLength); return pResult; } inline std::unique_ptr HttpPostJson(const char *pUrl, const char *pJson) { - std::unique_ptr pResult = std::unique_ptr(new CHttpRequest(pUrl)); + auto pResult = std::make_unique(pUrl); pResult->PostJson(pJson); return pResult; }