This is the mail archive of the gcc@gcc.gnu.org mailing list for the GCC 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]

Re: C++ interop issue due to non-null pointers


On Tue, Jun 17, 2014 at 02:41:38PM +0200, Florian Weimer wrote:
> On 06/12/2014 12:04 PM, Jonathan Wakely wrote:
> 
> >>  What can we do about it?
> >
> >How common is it to use std::vector with qsort, rather than
> >std::sort(vec.begin(), vec.end()), which does the right thing?
> 
> Our very own vec::qsort has the same problem, so I'd wager that it's fairly
> common.

template<typename T, typename A>
inline void
vec<T, A, vl_embed>::qsort (int (*cmp) (const void *, const void *))
{
  if (length () > 1)
      ::qsort (address (), length (), sizeof (T), cmp);
      }

So I don't think it does.

> >We could make vector::data() guarantee a non-null pointer with
> >_FORTIFY_SOURCE, but I'd rather not do so in "unfortified" code. Some
> >users would object to the extra check needed.
> 
> Or we could remove the nonnull attributes, so that the additional checks are
> not necessary.

I'm not that familiar with the exact requirements of std::vector, could
we use the same trick as
http://mxr.mozilla.org/mozilla-central/source/xpcom/glue/nsTArray.h#275
that is instead of pointing at null point at a global header used for
all empty vectors?

Trev

> 
> -- 
> Florian Weimer / Red Hat Product Security Team

Attachment: signature.asc
Description: Digital signature


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