diff options
author | jbj <jbj> | 2011-04-19 22:42:27 +0000 |
---|---|---|
committer | jbj <jbj> | 2011-04-19 22:42:27 +0000 |
commit | 69129313616c67c759953ba2bd15c289b983c2ce (patch) | |
tree | c481ac4413829df54b88e06fae33c698b3c8e759 | |
parent | eae407b47b88e48da6b3be6c2aedbc703aa435af (diff) | |
download | libpopt-69129313616c67c759953ba2bd15c289b983c2ce.tar.gz |
- fix: plug a memory leak related to contiguous argv malloc.
-rw-r--r-- | .cvsignore | 1 | ||||
-rw-r--r-- | popt.c | 12 |
2 files changed, 9 insertions, 4 deletions
@@ -21,6 +21,7 @@ config.log config.rpath config.status config.sub +configmake.h configure doxygen depcomp @@ -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; } |