Group :: Sistema/Bibliotecas
RPM: libpopt
Main Changelog Spec Patches Sources Download Gear Bugs e FR Repocop
Patch: popt-1.18-alt-alloc-checks.patch
Download
Download
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)