Sisyphus repositório
Última atualização: 1 outubro 2023 | SRPMs: 18631 | Visitas: 37044427
en ru br
ALT Linux repositórios
S:1.18-alt1
5.0: 1.14-alt4
4.1: 1.14-alt2
4.0: 1.7-alt16
3.0: 1.7-alt13

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


--- 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)
 
projeto & código: Vladimir Lettiev aka crux © 2004-2005, Andrew Avramenko aka liks © 2007-2008
mantenedor atual: Michael Shigorin
mantenedor da tradução: Fernando Martini aka fmartini © 2009