+2004-01-30 Paolo Carlini <pcarlini@suse.de>
+
+ * include/bits/basic_string.tcc (_Rep::_S_create):
+ Never allocate a string bigger than max_size(); always keep
+ __capacity and __size in sync to avoid memory leaks at
+ deallocation time.
+
2004-01-30 Paolo Carlini <pcarlini@suse.de>
* include/bits/basic_string.tcc (_S_construct(_InIterator,
- (__size + __malloc_header_size)
% __pagesize);
__capacity += __extra / sizeof(_CharT);
- __size += __extra;
+ // Never allocate a string bigger than _S_max_size.
+ if (__capacity > _S_max_size)
+ __capacity = _S_max_size;
+ __size = (__capacity + 1) * sizeof(_CharT) + sizeof(_Rep);
}
else if (__size > __subpagesize)
{
- (__size + __malloc_header_size)
% __subpagesize);
__capacity += __extra / sizeof(_CharT);
- __size += __extra;
+ __size = (__capacity + 1) * sizeof(_CharT) + sizeof(_Rep);
}
// NB: Might throw, but no worries about a leak, mate: _Rep()