aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Jonas Gunz <himself@jonasgunz.de> 2020-10-03 11:23:33 +0200
committerGravatar Jonas Gunz <himself@jonasgunz.de> 2020-10-03 11:23:33 +0200
commit43530628a808fda00a410b442196e58abe3507b7 (patch)
tree8157662911fbfdb546169ca8ea91a360612e0adf
parent05894765c6c5ad419896a0b0175a9c50c849f32b (diff)
downloadminecraft-rcon-43530628a808fda00a410b442196e58abe3507b7.tar.gz
fix crash
-rw-r--r--src/main.c21
-rw-r--r--src/rcon.c5
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 );