Fixed invalid EXTERNCMD allocation

externcmd_allocate now returns either a valid EXTERNCMD or NULL.
This commit is contained in:
Markus Makela 2015-11-11 21:26:10 +02:00
parent 2d600868f5
commit ba9da9ae3d

View File

@ -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;
}