From 69129313616c67c759953ba2bd15c289b983c2ce Mon Sep 17 00:00:00 2001 From: jbj Date: Tue, 19 Apr 2011 22:42:27 +0000 Subject: - fix: plug a memory leak related to contiguous argv malloc. --- popt.c | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) (limited to 'popt.c') diff --git a/popt.c b/popt.c index 525b471..189a01f 100644 --- a/popt.c +++ b/popt.c @@ -1023,6 +1023,7 @@ char * te = t; const char * s; int rc = 0; /* assume success */ long long retval = 0; + int i; const char ** av = NULL; int ac = 0; int xx; @@ -1072,8 +1073,7 @@ s = (expr ? expr : t); xx = poptParseArgvString(s, &ac, &av); /* XXX split on CSV character set. */ assert(!xx && av); - if (av) { - int i; + if (av) for (i = 0; av[i] != NULL; i++) { const char * arg = av[i]; size_t len = strlen(arg); @@ -1136,7 +1136,6 @@ assert(!xx && av); } } } - } if (ix-- < 1) { rc = POPT_ERROR_STACKUNDERFLOW; @@ -1145,8 +1144,13 @@ assert(!xx && av); retval = stk[ix]; exit: - if (av) + if (av) { +#if !defined(SUPPORT_CONTIGUOUS_ARGV) + for (i = 0; av[i]; i++) + av[i] = _free(av[i]); +#endif av = _free(av); + } *rcp = rc; return retval; } -- cgit v1.2.1