Fixed invalid EXTERNCMD allocation
externcmd_allocate now returns either a valid EXTERNCMD or NULL.
This commit is contained in:
@ -82,11 +82,12 @@ int tokenize_arguments(char* argstr, char** argv)
|
|||||||
*/
|
*/
|
||||||
EXTERNCMD* externcmd_allocate(char* argstr)
|
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))) &&
|
if (argstr && cmd && argv)
|
||||||
(cmd->argv = malloc(sizeof(char*) * MAXSCALE_EXTCMD_ARG_MAX)))
|
|
||||||
{
|
{
|
||||||
|
cmd->argv = argv;
|
||||||
if (tokenize_arguments(argstr, cmd->argv) == 0)
|
if (tokenize_arguments(argstr, cmd->argv) == 0)
|
||||||
{
|
{
|
||||||
if (access(cmd->argv[0], X_OK) != 0)
|
if (access(cmd->argv[0], X_OK) != 0)
|
||||||
@ -110,6 +111,12 @@ EXTERNCMD* externcmd_allocate(char* argstr)
|
|||||||
cmd = NULL;
|
cmd = NULL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
free(cmd);
|
||||||
|
free(argv);
|
||||||
|
cmd = NULL;
|
||||||
|
}
|
||||||
return cmd;
|
return cmd;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user