summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSven Verdoolaege <skimo@kotnet.org>2010-11-22 12:43:08 +0100
committerSven Verdoolaege <skimo@kotnet.org>2010-11-26 15:51:32 +0100
commit8b0347e222fdac92fa5813cffe7d9a98032d3f2b (patch)
treeeb864022d234ab423fb87b7b9d2feff49ea98ee0
parent1cc1256f683b9db1a1b4d251f2ad5cdfe1801c29 (diff)
downloadisl-8b0347e222fdac92fa5813cffe7d9a98032d3f2b.tar.gz
isl-8b0347e222fdac92fa5813cffe7d9a98032d3f2b.tar.bz2
isl-8b0347e222fdac92fa5813cffe7d9a98032d3f2b.zip
isl_arg_parse: free string arguments before overwriting them
Signed-off-by: Sven Verdoolaege <skimo@kotnet.org>
-rw-r--r--isl_arg.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/isl_arg.c b/isl_arg.c
index fb7eab77..5ce5e823 100644
--- a/isl_arg.c
+++ b/isl_arg.c
@@ -687,11 +687,13 @@ static int parse_str_option(struct isl_arg *decl, char **arg,
return 0;
if (has_argument) {
+ free(*p);
*p = strdup(s);
return 1;
}
if (arg[1]) {
+ free(*p);
*p = strdup(arg[1]);
return 2;
}
@@ -901,8 +903,9 @@ int isl_arg_parse(struct isl_arg *arg, int argc, char **argv, void *opt,
if (argv[1 + skip][0] != '-') {
a = next_arg(arg, a);
if (a >= 0) {
- const char **p;
- p = (const char **)(((char *)opt)+arg[a].offset);
+ char **p;
+ p = (char **)(((char *)opt)+arg[a].offset);
+ free(*p);
*p = strdup(argv[1 + skip]);
argc = drop_argument(argc, argv, 1 + skip, 1);
--n;