diff options
author | sapier <Sapier at GMX dot net> | 2014-08-22 14:03:04 +0200 |
---|---|---|
committer | sapier <Sapier at GMX dot net> | 2014-08-22 21:18:43 +0200 |
commit | d7d8aa1039e898dd37fcd8fa01d7f13c5452b43d (patch) | |
tree | ce9b4cb93136d20937d0b47c04b4529a03fb4887 /src/server.cpp | |
parent | 8e9d896f2d4bd3c9579170d01e14f1dd5e514362 (diff) | |
download | minetest-d7d8aa1039e898dd37fcd8fa01d7f13c5452b43d.tar.gz minetest-d7d8aa1039e898dd37fcd8fa01d7f13c5452b43d.tar.bz2 minetest-d7d8aa1039e898dd37fcd8fa01d7f13c5452b43d.zip |
Add player name length checks
Diffstat (limited to 'src/server.cpp')
-rw-r--r-- | src/server.cpp | 19 |
1 files changed, 13 insertions, 6 deletions
diff --git a/src/server.cpp b/src/server.cpp index 9bd8e70f3..93d00f369 100644 --- a/src/server.cpp +++ b/src/server.cpp @@ -1448,14 +1448,21 @@ void Server::ProcessData(u8 *data, u32 datasize, u16 peer_id) /* Set up player */ - - // Get player name char playername[PLAYERNAME_SIZE]; - for(u32 i=0; i<PLAYERNAME_SIZE-1; i++) - { - playername[i] = data[3+i]; + unsigned int playername_length = 0; + for (; playername_length < PLAYERNAME_SIZE; playername_length++ ) { + playername[playername_length] = data[3+playername_length]; + if (data[3+playername_length] == 0) + break; + } + + if (playername_length == PLAYERNAME_SIZE) { + actionstream<<"Server: Player with name exceeding max length " + <<"tried to connect from "<<addr_s<<std::endl; + DenyAccess(peer_id, L"Name to long"); + return; } - playername[PLAYERNAME_SIZE-1] = 0; + if(playername[0]=='\0') { |