Fix module commands with no arguments

Passing zero as the argument count would lead to a malloc for zero
bytes which would always cause a failure.
This commit is contained in:
Markus Makela
2016-11-28 23:18:38 +02:00
parent 05303f5b7e
commit c01430e3fc

View File

@ -136,10 +136,11 @@ static MODULECMD* command_create(const char *identifier, const char *domain,
MODULECMDFN entry_point, int argc, MODULECMDFN entry_point, int argc,
modulecmd_arg_type_t* argv) modulecmd_arg_type_t* argv)
{ {
ss_dassert((argc && argv) || (argc == 0 && argv == NULL));
MODULECMD *rval = MXS_MALLOC(sizeof(*rval)); MODULECMD *rval = MXS_MALLOC(sizeof(*rval));
char *id = MXS_STRDUP(identifier); char *id = MXS_STRDUP(identifier);
char *dm = MXS_STRDUP(domain); char *dm = MXS_STRDUP(domain);
modulecmd_arg_type_t *types = MXS_MALLOC(sizeof(*types) * argc); modulecmd_arg_type_t *types = MXS_MALLOC(sizeof(*types) * (argc ? argc : 1));
if (rval && id && dm && types) if (rval && id && dm && types)
{ {
@ -154,6 +155,13 @@ static MODULECMD* command_create(const char *identifier, const char *domain,
types[i] = argv[i]; types[i] = argv[i];
} }
if (argc == 0)
{
/** The command requires no arguments */
types[0].type = MODULECMD_ARG_NONE;
types[0].description = "";
}
rval->func = entry_point; rval->func = entry_point;
rval->identifier = id; rval->identifier = id;
rval->domain = dm; rval->domain = dm;