From ba9da9ae3d74546fe63023ff21c3f7e0f25003c3 Mon Sep 17 00:00:00 2001 From: Markus Makela Date: Wed, 11 Nov 2015 21:26:10 +0200 Subject: [PATCH] Fixed invalid EXTERNCMD allocation externcmd_allocate now returns either a valid EXTERNCMD or NULL. --- server/core/externcmd.c | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/server/core/externcmd.c b/server/core/externcmd.c index 413854ba9..644c6c2cf 100644 --- a/server/core/externcmd.c +++ b/server/core/externcmd.c @@ -82,11 +82,12 @@ int tokenize_arguments(char* argstr, char** argv) */ EXTERNCMD* externcmd_allocate(char* argstr) { - EXTERNCMD* cmd = NULL; + EXTERNCMD* cmd = (EXTERNCMD*) malloc(sizeof(EXTERNCMD)); + char** argv = (char**) malloc(sizeof(char*) * MAXSCALE_EXTCMD_ARG_MAX); - if (argstr && (cmd = (EXTERNCMD*) malloc(sizeof(EXTERNCMD))) && - (cmd->argv = malloc(sizeof(char*) * MAXSCALE_EXTCMD_ARG_MAX))) + if (argstr && cmd && argv) { + cmd->argv = argv; if (tokenize_arguments(argstr, cmd->argv) == 0) { if (access(cmd->argv[0], X_OK) != 0) @@ -110,6 +111,12 @@ EXTERNCMD* externcmd_allocate(char* argstr) cmd = NULL; } } + else + { + free(cmd); + free(argv); + cmd = NULL; + } return cmd; }