diff options
author | Denis Vlasenko <vda.linux@googlemail.com> | 2008-08-20 23:03:38 +0000 |
---|---|---|
committer | Denis Vlasenko <vda.linux@googlemail.com> | 2008-08-20 23:03:38 +0000 |
commit | e417be669766417bc6b0783e1e94fbf5d34e10d3 (patch) | |
tree | fdda51e1342049b8596eef1cb698f93dd29ae7e2 | |
parent | b9c262b0296de501c387539abd67d324e33ddcea (diff) | |
download | busybox-e417be669766417bc6b0783e1e94fbf5d34e10d3.tar.gz |
getopt32: do not return pointer to alloca() areas
-rw-r--r-- | libbb/getopt32.c | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/libbb/getopt32.c b/libbb/getopt32.c index 54dc7857d..8fb99b6cc 100644 --- a/libbb/getopt32.c +++ b/libbb/getopt32.c @@ -155,12 +155,20 @@ Special characters: Allows any arguments to be given without a dash (./program w x) as well as with a dash (./program -x). + NB: getopt32() will leak a small amount of memory if you use + this option! Do not use it if there is a possibility of recursive + getopt32() calls. + "--" A double dash at the beginning of opt_complementary means the argv[1] string should always be treated as options, even if it isn't prefixed with a "-". This is useful for special syntax in applets such as "ar" and "tar": tar xvf foo.tar + NB: getopt32() will leak a small amount of memory if you use + this option! Do not use it if there is a possibility of recursive + getopt32() calls. + "-N" A dash as the first char in a opt_complementary group followed by a single digit (0-9) means that at least N non-option arguments must be present on the command line @@ -493,7 +501,10 @@ getopt32(char **argv, const char *applet_opts, ...) pargv = argv + 1; while (*pargv) { if (pargv[0][0] != '-' && pargv[0][0] != '\0') { - char *pp = alloca(strlen(*pargv) + 2); + /* Can't use alloca: opts with params will + * return pointers to stack! + * NB: we leak these allocations... */ + char *pp = xmalloc(strlen(*pargv) + 2); *pp = '-'; strcpy(pp + 1, *pargv); *pargv = pp; |