1
0
Fork 0
mirror of https://github.com/luanti-org/luanti.git synced 2025-08-06 17:41:04 +00:00

Enforce explicit size limit for media files

This commit is contained in:
sfan5 2025-07-15 12:41:38 +02:00
parent 3cb8ce69d2
commit 251488b3aa
3 changed files with 15 additions and 0 deletions

View file

@ -284,6 +284,9 @@ Accepted formats are:
models: .x, .b3d, .obj, (since version 5.10:) .gltf, .glb models: .x, .b3d, .obj, (since version 5.10:) .gltf, .glb
fonts: .ttf, .woff (both since version 5.11, see notes below) fonts: .ttf, .woff (both since version 5.11, see notes below)
Currently the engine is unable to handle files over ~16MB in size. For best
performance you should keep your media files as small as reasonably possible.
Other formats won't be sent to the client (e.g. you can store .blend files Other formats won't be sent to the client (e.g. you can store .blend files
in a folder for convenience, without the risk that such files are transferred) in a folder for convenience, without the risk that such files are transferred)

View file

@ -16,8 +16,14 @@ constexpr u16 CLIENT_PROTOCOL_VERSION_MIN = 37;
extern const u16 FORMSPEC_API_VERSION; extern const u16 FORMSPEC_API_VERSION;
// (applies to all media files, not just textures)
#define TEXTURENAME_ALLOWED_CHARS "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_.-" #define TEXTURENAME_ALLOWED_CHARS "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_.-"
// Due to our network protocol the maximum window size determines the maximum
// media size we can safely allow. See the comment and check in Connection::Send().
// This is a bit lower to include safety margin.
#define MEDIAFILE_MAX_SIZE (16700000U)
typedef u16 session_t; typedef u16 session_t;
enum ToClientCommand : u16 enum ToClientCommand : u16

View file

@ -2586,6 +2586,12 @@ bool Server::addMediaFile(const std::string &filename,
<< filepath << "\"" << std::endl; << filepath << "\"" << std::endl;
return false; return false;
} }
if (filedata.size() > MEDIAFILE_MAX_SIZE) {
errorstream << "Server::addMediaFile(): \""
<< filepath << "\" is too big (" << (filedata.size() >> 10)
<< "KiB). The internal limit is " << (MEDIAFILE_MAX_SIZE >> 10) << "KiB." << std::endl;
return false;
}
std::string sha1 = hashing::sha1(filedata); std::string sha1 = hashing::sha1(filedata);
std::string sha1_hex = hex_encode(sha1); std::string sha1_hex = hex_encode(sha1);