diff options
Diffstat (limited to 'src/script/cpp_api')
-rw-r--r-- | src/script/cpp_api/s_security.cpp | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/src/script/cpp_api/s_security.cpp b/src/script/cpp_api/s_security.cpp index 0d989ae04..09e971007 100644 --- a/src/script/cpp_api/s_security.cpp +++ b/src/script/cpp_api/s_security.cpp @@ -579,6 +579,17 @@ bool ScriptApiSecurity::checkPath(lua_State *L, const char *path, } lua_pop(L, 1); // Pop mod name + // Allow read-only access to game directory + if (!write_required) { + const SubgameSpec *game_spec = gamedef->getGameSpec(); + if (game_spec && !game_spec->path.empty()) { + str = fs::AbsolutePath(game_spec->path); + if (!str.empty() && fs::PathStartsWith(abs_path, str)) { + return true; + } + } + } + // Allow read-only access to all mod directories if (!write_required) { const std::vector<ModSpec> &mods = gamedef->getMods(); |