summaryrefslogtreecommitdiff
path: root/popt/poptparse.c
diff options
context:
space:
mode:
Diffstat (limited to 'popt/poptparse.c')
-rw-r--r--popt/poptparse.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/popt/poptparse.c b/popt/poptparse.c
index 7c9f06be..8f00769b 100644
--- a/popt/poptparse.c
+++ b/popt/poptparse.c
@@ -43,7 +43,8 @@ int poptParseArgvString(const char * s, int * argcPtr, const char *** argvPtr)
const char ** argv = malloc(sizeof(*argv) * argvAlloced);
int argc = 0;
int buflen = strlen(s) + 1;
- char * buf = memset(alloca(buflen), 0, buflen);
+ char *buf0 = calloc(buflen, 1);
+ char *buf = buf0;
argv[argc] = buf;
@@ -55,6 +56,7 @@ int poptParseArgvString(const char * s, int * argcPtr, const char *** argvPtr)
src++;
if (!*src) {
free(argv);
+ free(buf0);
return POPT_ERROR_BADQUOTE;
}
if (*src != quote) *buf++ = '\\';
@@ -78,6 +80,7 @@ int poptParseArgvString(const char * s, int * argcPtr, const char *** argvPtr)
src++;
if (!*src) {
free(argv);
+ free(buf0);
return POPT_ERROR_BADQUOTE;
}
/*@fallthrough@*/
@@ -94,6 +97,6 @@ int poptParseArgvString(const char * s, int * argcPtr, const char *** argvPtr)
(void) poptDupArgv(argc, argv, argcPtr, argvPtr);
free(argv);
-
+ free(buf0);
return 0;
}