diff options
author | Jonas Gunz <himself@jonasgunz.de> | 2020-10-03 11:23:33 +0200 |
---|---|---|
committer | Jonas Gunz <himself@jonasgunz.de> | 2020-10-03 11:23:33 +0200 |
commit | 43530628a808fda00a410b442196e58abe3507b7 (patch) | |
tree | 8157662911fbfdb546169ca8ea91a360612e0adf | |
parent | 05894765c6c5ad419896a0b0175a9c50c849f32b (diff) | |
download | minecraft-rcon-43530628a808fda00a410b442196e58abe3507b7.tar.gz |
fix crash
-rw-r--r-- | src/main.c | 21 | ||||
-rw-r--r-- | src/rcon.c | 5 |
2 files changed, 17 insertions, 9 deletions
@@ -31,19 +31,23 @@ int connect_socket ( char* _host, char* _port ); void print_help ( char* _progname ); int main( int argc, char* argv[] ) { - program_params_t args = parse_args( argc, argv ); + program_params_t args; + int ret, sock; + char* result; - int sock = connect_socket ( args.host, args.port ); + args = parse_args( argc, argv ); + sock = connect_socket ( args.host, args.port ); + result = NULL; - fprintf ( stderr, "Connection successful.\n" ); - - if ( rcon_login ( sock, args.password ) ) { - fprintf ( stderr, "Authentification failed.\n" ); + if ( (ret = rcon_login ( sock, args.password )) ) { + fprintf ( stderr, "rcon_login: %s\n", rcon_strerror ( ret ) ); exit ( EXIT_FAILURE ); } - char* result = NULL; - rcon_command ( &result, sock, args.command ); + if ( (ret = rcon_command ( &result, sock, args.command )) ) { + fprintf ( stderr, "rcon_command: %s\n", rcon_strerror ( ret ) ); + exit ( EXIT_FAILURE ); + } printf("%s\n", result); @@ -124,4 +128,5 @@ void print_help ( char* _progname ) { " %s HOST PORT PASSWORD COMMAND ...", _progname ); + exit ( EXIT_FAILURE ); } @@ -191,9 +191,12 @@ int rcon_command ( char** _output, int _socket, const char* _command ) { if ( (ret = rcon_recv_packet ( _socket, &result, 1000 )) ) return ret; + if ( ! result.payload_len ) + return RCON_ERR_GENERIC; + // TODO truncated response *_output = malloc ( result.payload_len + 1 ); - *_output[result.payload_len] = 0; + (*_output)[result.payload_len] = 0; memcpy ( *_output, result.payload, result.payload_len ); rcon_free_packet ( &result ); |