From 9aaed75eea0145ef3ee88bdd6d5507e5fd8d76c2 Mon Sep 17 00:00:00 2001 From: lhofhansl Date: Thu, 27 Oct 2022 19:31:42 -0700 Subject: [PATCH] Safety check the map's blocksize (#12895) --- src/content/subgames.cpp | 2 ++ src/serverenvironment.cpp | 7 +++++++ 2 files changed, 9 insertions(+) diff --git a/src/content/subgames.cpp b/src/content/subgames.cpp index d0de926ef..3658fa83e 100644 --- a/src/content/subgames.cpp +++ b/src/content/subgames.cpp @@ -390,6 +390,8 @@ void loadGameConfAndInitWorld(const std::string &path, const std::string &name, conf.set("mod_storage_backend", "sqlite3"); conf.setBool("creative_mode", g_settings->getBool("creative_mode")); conf.setBool("enable_damage", g_settings->getBool("enable_damage")); + if (MAP_BLOCKSIZE != 16) + conf.set("blocksize", std::to_string(MAP_BLOCKSIZE)); if (!conf.updateConfigFile(worldmt_path.c_str())) { throw BaseException("Failed to update the config file"); diff --git a/src/serverenvironment.cpp b/src/serverenvironment.cpp index dfa3e0961..4cdb21a4b 100644 --- a/src/serverenvironment.cpp +++ b/src/serverenvironment.cpp @@ -420,6 +420,13 @@ void ServerEnvironment::init() // If we open world.mt read the backend configurations. if (succeeded) { + // Check that the world's blocksize matches the compiled MAP_BLOCKSIZE + u16 blocksize = 16; + conf.getU16NoEx("blocksize", blocksize); + if (blocksize != MAP_BLOCKSIZE) { + throw BaseException(std::string("The map's blocksize is not supported.")); + } + // Read those values before setting defaults bool player_backend_exists = conf.exists("player_backend"); bool auth_backend_exists = conf.exists("auth_backend");