diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/main.cpp | 8 | ||||
-rw-r--r-- | src/server.cpp | 19 |
2 files changed, 21 insertions, 6 deletions
diff --git a/src/main.cpp b/src/main.cpp index bb2ac5faf..a44a2e611 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -79,6 +79,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "httpfetch.h" #include "guiEngine.h" #include "mapsector.h" +#include "player.h" #include "database-sqlite3.h" #ifdef USE_LEVELDB @@ -1843,6 +1844,13 @@ int main(int argc, char *argv[]) break; } + if (current_playername.length() > PLAYERNAME_SIZE-1) { + error_message = wgettext("Player name to long."); + playername = current_playername.substr(0,PLAYERNAME_SIZE-1); + g_settings->set("name", playername); + continue; + } + /* Run game */ 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') { |