Group :: Sistema/Bibliotecas
RPM: libpopt
Main Changelog Spec Patches Sources Download Gear Bugs e FR Repocop
Patch: popt-1.14-alt-alloc-checks.patch
Download
Download
--- a/popt/popt.c
+++ b/popt/popt.c
@@ -163,8 +163,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));
@@ -189,6 +192,7 @@ poptContext poptGetContext(const char * name, int argc, const char ** argv,
con->numExecs = 0;
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;
@@ -285,6 +289,7 @@ static int handleExec(/*@special@*/ 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++;
@@ -668,6 +673,7 @@ expandNextArg(/*@special@*/ poptContext con, const char * s)
tn += strlen(a);
{ size_t pos = (size_t) (te - t);
t = realloc(t, tn);
+ if (t == NULL) return NULL;
te = stpcpy(t + pos, a);
}
continue;
@@ -1155,6 +1161,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)