Skip to content

Commit 9d765a7

Browse files
committed
Unlike MakeSpace(), std::string::resize() modifies the string length, so change GetBuffer() to grow only, preserving existing contents.
1 parent 81b2930 commit 9d765a7

1 file changed

Lines changed: 9 additions & 5 deletions

File tree

‎src/Str8.cpp‎

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -201,17 +201,21 @@ int Str8::Find(const char* psz, int iStart) const
201201

202202
char* Str8::GetBuffer(int iSize) // Write access to buffer
203203
{
204-
_data.resize(iSize); // ensures buffer has at least iSize chars
204+
if (static_cast<size_t>(iSize) > _data.size())
205+
_data.resize(iSize); // grow to requested size
205206
AssertValid();
206207
return _data.data(); // writable buffer
207208
}
208209

209-
void Str8::ReleaseBuffer(int iLen) // Release buffer after writing
210+
void Str8::ReleaseBuffer(int iLen)
210211
{
211-
if (iLen >= 0 && iLen < static_cast<int>(_data.size()))
212-
_data.resize(iLen);
212+
if (iLen >= 0)
213+
{
214+
assert(iLen <= static_cast<int>(_data.size()));
215+
_data.resize(std::min(iLen, static_cast<int>(_data.size())));
216+
}
213217
else
214-
_data.resize(std::strlen(_data.c_str())); // recalc if unknown length
218+
_data.resize(std::strlen(_data.c_str())); // recalc if unknown length
215219
AssertValid();
216220
}
217221

0 commit comments

Comments
 (0)