From 43530628a808fda00a410b442196e58abe3507b7 Mon Sep 17 00:00:00 2001 From: Jonas Gunz Date: Sat, 3 Oct 2020 11:23:33 +0200 Subject: fix crash --- src/main.c | 21 +++++++++++++-------- src/rcon.c | 5 ++++- 2 files changed, 17 insertions(+), 9 deletions(-) diff --git a/src/main.c b/src/main.c index 4ce6e87..3fda198 100644 --- a/src/main.c +++ b/src/main.c @@ -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 ); } diff --git a/src/rcon.c b/src/rcon.c index 1e876cf..785770d 100644 --- a/src/rcon.c +++ b/src/rcon.c @@ -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 ); -- cgit v1.2.3