Skip to content

Commit 68044fd

Browse files
committed
GH pocoproject#305: There are bugs in Buffer.h
1 parent ba3a8b0 commit 68044fd

2 files changed

Lines changed: 9 additions & 5 deletions

File tree

‎CHANGELOG‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@ Release 1.5.3 (2014-05-xx)
6060
- added GH #313: MetaColumn additions for Data::ODBC and Data::SQLite
6161
- fixed GH #346: Make Poco::Data::Date and Poco::Data::Time compare functions const.
6262
- fixed GH #341: Compiling poco-1.5.2 for Cygwin
63+
- fixed GH #305: There are bugs in Buffer.h
6364

6465
Release 1.5.2 (2013-09-16)
6566
==========================

‎Foundation/include/Poco/Buffer.h‎

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -142,7 +142,7 @@ class Buffer
142142
{
143143
T* ptr = new T[newCapacity];
144144
if (preserveContent)
145-
std::memcpy(ptr, _ptr, _used);
145+
std::memcpy(ptr, _ptr, _used * sizeof(T));
146146

147147
delete [] _ptr;
148148
_ptr = ptr;
@@ -171,7 +171,10 @@ class Buffer
171171
{
172172
T* ptr = new T[newCapacity];
173173
if (preserveContent)
174-
std::memcpy(ptr, _ptr, _used < newCapacity ? _used : newCapacity);
174+
{
175+
std::size_t newSz = _used < newCapacity ? _used : newCapacity;
176+
std::memcpy(ptr, _ptr, newSz * sizeof(T));
177+
}
175178

176179
delete [] _ptr;
177180
_ptr = ptr;
@@ -187,7 +190,7 @@ class Buffer
187190
{
188191
if (0 == sz) return;
189192
if (sz > _capacity) resize(sz, false);
190-
std::memcpy(_ptr, buf, sz);
193+
std::memcpy(_ptr, buf, sz * sizeof(T));
191194
_used = sz;
192195
}
193196

@@ -196,7 +199,7 @@ class Buffer
196199
{
197200
if (0 == sz) return;
198201
resize(_used + sz, true);
199-
std::memcpy(_ptr + _used - sz, buf, sz);
202+
std::memcpy(_ptr + _used - sz, buf, sz * sizeof(T));
200203
}
201204

202205
void append(T val)
@@ -241,7 +244,7 @@ class Buffer
241244
{
242245
if (_used == other._used)
243246
{
244-
if (std::memcmp(_ptr, other._ptr, _used) == 0)
247+
if (std::memcmp(_ptr, other._ptr, _used * sizeof(T)) == 0)
245248
{
246249
return true;
247250
}

0 commit comments

Comments
 (0)