Репозиторий Sisyphus
Последнее обновление: 1 октября 2023 | Пакетов: 18631 | Посещений: 37038906
en ru br
Репозитории ALT
S:1.18-alt1
5.1: 1.14-alt4
4.1: 1.14-alt2
4.0: 1.7-alt16
3.0: 1.7-alt13
www.altlinux.org/Changes

Группа :: Система/Библиотеки
Пакет: libpopt

 Главная   Изменения   Спек   Патчи   Sources   Загрузить   Gear   Bugs and FR  Repocop 

Патч: popt-1.18-alt-alloc-checks.patch
Скачать


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)
 
дизайн и разработка: Vladimir Lettiev aka crux © 2004-2005, Andrew Avramenko aka liks © 2007-2008
текущий майнтейнер: Michael Shigorin