On Fri, Nov 23, 2012 at 09:23:37AM -0800, H.J. Lu wrote: > This patch allocates extra 16 bytes for -fsanitize=address so that > asan won't report read beyond memory buffer. It is used by > bootstrap-asan. OK to install?
As valgrind warns about that too, I'd say we should do that unconditionally, the additional 16-bytes just aren't a big deal. But, _cpp_convert_input isn't the only place which needs that, IMHO you want to also change the caller, read_file_guts, where it does buf = XNEWVEC (uchar, size + 1); and buf = XRESIZEVEC (uchar, buf, size + 1); I'll defer the review to Tom though. > 2012-11-21 H.J. Lu <hongjiu...@intel.com> > > PR bootstrap/55380 > * charset.c (_cpp_convert_input): Allocate extra 16 bytes for > -fsanitize=address if __SANITIZE_ADDRESS__ is defined. > > diff --git a/libcpp/charset.c b/libcpp/charset.c > index cba19a6..dea8bb1 100644 > --- a/libcpp/charset.c > +++ b/libcpp/charset.c > @@ -1729,9 +1729,16 @@ _cpp_convert_input (cpp_reader *pfile, const char > *input_charset, > iconv_close (input_cset.cd); > > /* Resize buffer if we allocated substantially too much, or if we > - haven't enough space for the \n-terminator. */ > + haven't enough space for the \n-terminator. Allocate extra 16 > + bytes for -fsanitize=address. */ > if (to.len + 4096 < to.asize || to.len >= to.asize) > - to.text = XRESIZEVEC (uchar, to.text, to.len + 1); > + { > +#ifdef __SANITIZE_ADDRESS__ > + to.text = XRESIZEVEC (uchar, to.text, to.len + 17); > +#else > + to.text = XRESIZEVEC (uchar, to.text, to.len + 1); > +#endif > + } > > /* If the file is using old-school Mac line endings (\r only), > terminate with another \r, not an \n, so that we do not mistake Jakub