From 786cc29fa93dcf771e992076c2a780f25d733ed5 Mon Sep 17 00:00:00 2001 From: Pelish <pelish@gmail.com> Date: Sun, 14 Feb 2010 11:55:56 +0000 Subject: [PATCH] fix for WOL gamepass bug --- pvpgn/src/bnetd/handle_wol.cpp | 32 +++++++++++++++++--------------- 1 file changed, 17 insertions(+), 15 deletions(-) diff --git a/pvpgn/src/bnetd/handle_wol.cpp b/pvpgn/src/bnetd/handle_wol.cpp index 264b32a..1e53955 100644 --- a/pvpgn/src/bnetd/handle_wol.cpp +++ b/pvpgn/src/bnetd/handle_wol.cpp @@ -1021,7 +1021,9 @@ static int _handle_joingame_command(t_connection * conn, int numparams, char ** t_game_type gametype; t_channel * channel; t_channel * old_channel = conn_get_channel(conn); - char * gamepass; + char gamepass [MAX_GAMEPASS_LEN]; + + std::memset(gamepass,0,sizeof(gamepass)); if ((conn_get_clienttag(conn) == CLIENTTAG_REDALERT_UINT) && (channellist_find_channel_by_name(gamename, NULL, NULL) != NULL) @@ -1061,8 +1063,9 @@ static int _handle_joingame_command(t_connection * conn, int numparams, char ** } if (std::strcmp(game_get_pass(game),"") != 0) { - if ((params[2]) && (std::strcmp(params[2], game_get_pass(game)) == 0)) - gamepass = params[2]; + if ((numparams==3) && (params[2]) && (std::strcmp(params[2], game_get_pass(game)) == 0)) { + strcpy(gamepass, params[2]); + } else { snprintf(_temp, sizeof(_temp), "%s :Bad password", e[0]); irc_send(conn,ERR_BADCHANNELKEY,_temp); @@ -1071,8 +1074,6 @@ static int _handle_joingame_command(t_connection * conn, int numparams, char ** return 0; } } - else - gamepass = ""; conn_wol_set_ingame(conn,1); gametype = game_get_type(game); @@ -1120,9 +1121,9 @@ static int _handle_joingame_command(t_connection * conn, int numparams, char ** } } } - if (e) - irc_unget_listelems(e); - return 0; + if (e) + irc_unget_listelems(e); + return 0; } else if((numparams>=7)) { char ** e; @@ -1151,18 +1152,19 @@ static int _handle_joingame_command(t_connection * conn, int numparams, char ** if ((e)&&(e[0])) { char const * gamename = irc_convert_ircname(e[0]); t_game_type gametype; - char * gamepass; - - if (std::atoi(params[6]) == 1) + char gamepass [MAX_GAMEPASS_LEN]; + + std::memset(gamepass,0,sizeof(gamepass)); + + if (std::strcmp(params[6], "1") == 0) gametype = game_type_ladder; else gametype = game_type_ffa; // gametype = game_type_none; - if (params[8]) - gamepass = params[8]; - else - gamepass = ""; + if ((numparams>=8) && (params[8])) { + strcpy(gamepass, params[8]); + } if ((!(gamename)) || ((conn_set_game(conn, gamename, gamepass, "", gametype, 0))<0)) { irc_send(conn,ERR_NOSUCHCHANNEL,":JOINGAME failed"); /* FIXME: be more precise; what is the real error code for that? */