diff --git a/popt/src/popt.c b/popt/src/popt.c index 2db2bbd..54a217c 100644 --- a/popt/src/popt.c +++ b/popt/src/popt.c @@ -154,8 +154,11 @@ static void invokeCallbacksOPTION(poptContext con, poptContext poptGetContext(const char * name, int argc, const char ** argv, const struct poptOption * options, unsigned int flags) { - poptContext con = malloc(sizeof(*con)); + poptContext con; + if (argc < 1) return NULL; + + con = malloc(sizeof(*con)); if (con == NULL) return NULL; /* XXX can't happen */ memset(con, 0, sizeof(*con)); @@ -177,6 +180,7 @@ poptContext poptGetContext(const char * name, int argc, const char ** argv, con->execFail = NULL; con->finalArgvAlloced = argc * 2; con->finalArgv = calloc( (size_t)con->finalArgvAlloced, sizeof(*con->finalArgv) ); + if (con->finalArgv == NULL) con->finalArgvAlloced = 0; con->execAbsolute = 1; con->arg_strip = NULL; @@ -264,6 +268,7 @@ static int handleExec(poptContext con, con->finalArgvAlloced += 10; con->finalArgv = realloc(con->finalArgv, sizeof(*con->finalArgv) * con->finalArgvAlloced); + if (con->finalArgv == NULL) con->finalArgvCount = con->finalArgvAlloced = 0; } i = con->finalArgvCount++; @@ -1429,6 +1434,7 @@ int poptGetNextOpt(poptContext con) con->finalArgvAlloced += 10; con->finalArgv = realloc(con->finalArgv, sizeof(*con->finalArgv) * con->finalArgvAlloced); + if (con->finalArgv == NULL) con->finalArgvCount = con->finalArgvAlloced = 0; } if (con->finalArgv != NULL)