[Bug libstdc++/48257] std::string::assign() corrupts std::string static data when called on emptyString1 using emptyString2.data()
redi at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Thu Mar 24 11:59:00 GMT 2011
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=48257
--- Comment #12 from Jonathan Wakely <redi at gcc dot gnu.org> 2011-03-24 11:27:44 UTC ---
(In reply to comment #11)
> (In reply to comment #10)
> > Two questions here:
> >
> > 1. Is the behaviour undefined for __n < number of elements in __s?
> >
>
> Oops! I meant for __n > number of elements in __s.
Yes! The standard defines the behaviour of string::assign when s contains at
least n elements. When that precondition isn't met the definition doesn't apply
i.e. it's undefined.
> > 2. For cases undefined in the specs, do we take steps to ensure robustness?
Where possible, yes, that's what -D_GLIBCXX_DEBUG tries to do. But in general
it's not possible to verify that the supplied string meets the required length.
Given a const char*, how do you tell if it points to an array of at least n
chars? You can't.
It would be possible to check that the supplied const char* is not the shared
static "empty string" representation, but that would add overhead and still
wouldn't prevent similar errors like:
string s("oops", 999);
> > I
> > still cannot digest that a programmer error could corrupt std::string static
> > memory.
Really? A sufficiently malicious/careless programmer can corrupt pretty much
anything!
In any case, if you try your original example with current releases it doesn't
print '4'
More information about the Gcc-bugs
mailing list