mirror of
https://github.com/luanti-org/luanti.git
synced 2025-06-27 16:36:03 +00:00
Create a filesystem abstraction layer for CSM and only allow accessing files that are scanned into it. (#5965)
* Load client-side mods into memory before executing them. This removes the remaining filesystem access that client-sided mods had and it will hopefully make then more secure. * Lua Virtual filesystem: don't load the files into memory just scan the filenames into memory. * Fix the issues with backtrace * fix most of the issues * fix code style. * add a comment
This commit is contained in:
parent
2e53801fc0
commit
f3ad75691a
24 changed files with 230 additions and 101 deletions
16
src/client.h
16
src/client.h
|
@ -37,6 +37,8 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
|||
#include "mapnode.h"
|
||||
#include "tileanimation.h"
|
||||
#include "mesh_generator_thread.h"
|
||||
#include <fstream>
|
||||
#include "filesys.h"
|
||||
|
||||
#define CLIENT_CHAT_MESSAGE_LIMIT_PER_10S 10.0f
|
||||
|
||||
|
@ -273,6 +275,16 @@ public:
|
|||
~Client();
|
||||
DISABLE_CLASS_COPY(Client);
|
||||
|
||||
// Load local mods into memory
|
||||
void loadMods();
|
||||
void scanModSubfolder(const std::string &mod_name, const std::string &mod_path,
|
||||
std::string mod_subpath);
|
||||
inline void scanModIntoMemory(const std::string &mod_name, const std::string &mod_path)
|
||||
{
|
||||
scanModSubfolder(mod_name, mod_path, "");
|
||||
}
|
||||
|
||||
// Initizle the mods
|
||||
void initMods();
|
||||
|
||||
/*
|
||||
|
@ -492,6 +504,7 @@ public:
|
|||
bool checkLocalPrivilege(const std::string &priv)
|
||||
{ return checkPrivilege(priv); }
|
||||
virtual scene::IAnimatedMesh* getMesh(const std::string &filename);
|
||||
const std::string* getModFile(const std::string &filename);
|
||||
|
||||
virtual std::string getModStoragePath() const;
|
||||
virtual bool registerModStorage(ModMetadata *meta);
|
||||
|
@ -672,6 +685,8 @@ private:
|
|||
// Storage for mesh data for creating multiple instances of the same mesh
|
||||
StringMap m_mesh_data;
|
||||
|
||||
StringMap m_mod_files;
|
||||
|
||||
// own state
|
||||
LocalClientState m_state;
|
||||
|
||||
|
@ -684,6 +699,7 @@ private:
|
|||
bool m_modding_enabled;
|
||||
std::unordered_map<std::string, ModMetadata *> m_mod_storages;
|
||||
float m_mod_storage_save_timer = 10.0f;
|
||||
std::vector<ModSpec> m_mods;
|
||||
GameUIFlags *m_game_ui_flags;
|
||||
|
||||
bool m_shutdown = false;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue