svn commit: trunk/busybox/libbb

vda at busybox.net vda at busybox.net
Wed Aug 20 23:03:38 UTC 2008


Author: vda
Date: 2008-08-20 16:03:38 -0700 (Wed, 20 Aug 2008)
New Revision: 23125

Log:
getopt32: do not return pointer to alloca() areas



Modified:
   trunk/busybox/libbb/getopt32.c


Changeset:
Modified: trunk/busybox/libbb/getopt32.c
===================================================================
--- trunk/busybox/libbb/getopt32.c	2008-08-20 22:19:27 UTC (rev 23124)
+++ trunk/busybox/libbb/getopt32.c	2008-08-20 23:03:38 UTC (rev 23125)
@@ -155,12 +155,20 @@
         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 @@
 		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;




More information about the busybox-cvs mailing list