This is the mail archive of the binutils@sourceware.org mailing list for the binutils project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

PATCH: PR binutils/14526: c++filt is crashed on large files


Hi,

buildargv uses alloca to allocate buffer, whose size may exceed stack
limit.  This patch replaces alloca with xmalloc/free.  OK to install?

Thanks.

H.J.
---
	PR binutils/14526
	* argv.c (buildargv): Replace alloca with xmalloc/free.

diff --git a/libiberty/argv.c b/libiberty/argv.c
index ca53f91..4cef3bc 100644
--- a/libiberty/argv.c
+++ b/libiberty/argv.c
@@ -191,7 +191,7 @@ char **buildargv (const char *input)
 
   if (input != NULL)
     {
-      copybuf = (char *) alloca (strlen (input) + 1);
+      copybuf = (char *) xmalloc (strlen (input) + 1);
       /* Is a do{}while to always execute the loop once.  Always return an
 	 argv, even for null strings.  See NOTES above, test case below. */
       do
@@ -297,6 +297,8 @@ char **buildargv (const char *input)
 	  consume_whitespace (&input);
 	}
       while (*input != EOS);
+
+      free (copybuf);
     }
   return (argv);
 }


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]