Message ID | CAFULd4YMrT+yj0vxPF_-xjiR0PyCt3pwibEqbtEEC0FTtk1wbA@mail.gmail.com |
---|---|
State | New |
Headers | show |
On Tue, 9 Dec 2014, Uros Bizjak wrote: > Attached patch checks the return value and sets ptr to NULL in this case. > > 2014-12-09 Uros Bizjak <ubizjak@gmail.com> > > * directives.c (cpp_define_formatted): Check return value of > vasprintf and in case of error set ptr to NULL. > > Bootstrapped on x86_64-linux-gnu. > > OK for mainline? No, this will just continue to pass NULL into cpp_define, and so into strlen, where it isn't a valid argument. You need to give an error message for allocation failure and exit, much like xmalloc does (or put xvasprintf in libiberty and use that here - see <https://gcc.gnu.org/ml/gcc-patches/2009-11/msg01448.html> and <https://gcc.gnu.org/ml/gcc-patches/2009-11/msg01449.html> - I don't know if that's the latest version).
Index: directives.c =================================================================== --- directives.c (revision 218525) +++ directives.c (working copy) @@ -2408,7 +2408,8 @@ cpp_define_formatted (cpp_reader *pfile, const cha va_list ap; va_start (ap, fmt); - vasprintf (&ptr, fmt, ap); + if (vasprintf (&ptr, fmt, ap) < 0) + ptr = NULL; va_end (ap); cpp_define (pfile, ptr);