This is the mail archive of the
libstdc++@gcc.gnu.org
mailing list for the libstdc++ project.
Re: [patch] libstdc++/61086 - fix ubsan errors in std::vector
- From: Jonathan Wakely <jwakely at redhat dot com>
- To: Paolo Carlini <paolo dot carlini at oracle dot com>
- Cc: libstdc++ at gcc dot gnu dot org, gcc-patches at gcc dot gnu dot org
- Date: Wed, 7 May 2014 13:33:59 +0100
- Subject: Re: [patch] libstdc++/61086 - fix ubsan errors in std::vector
- Authentication-results: sourceware.org; auth=none
- References: <20140507120743 dot GB18109 at redhat dot com> <536A2550 dot 502 at oracle dot com>
On 07/05/14 14:21 +0200, Paolo Carlini wrote:
On 05/07/2014 02:07 PM, Jonathan Wakely wrote:
The testcase in the PR calls __position._M_const_cast() to get a
mutable iterator and that dereferences the pointer as suggested in
http://gcc.gnu.org/ml/libstdc++/2013-05/msg00031.html
That's invalid because the pointer is not dereferenceable (in this
case it's null but is past-the-end at all times).
Uhmm, I see, at the time I scratched my head a bit. Nice that we can
avoid the whole thing. Are we sure we don't have something similar
elsewhere?
Yes, I checked. deque::const_iterator, list::const_iterator,
vector<bool>::const_iterator and the _Rb_tree_const_iterator types all
have _M_const_cast but they do not dereference anything.
It only really affected std::vector because that's the only one of our
containers that correctly supports custom pointer types (when my fixes
for PR57272 are ready I'll need to deal with the issue again and will
be careful about dereferencing).