--- a/src/common/buffer.cc Thu May 08 12:40:44 2008 -0700
+++ b/src/common/buffer.cc Thu May 15 09:49:04 2008 -0700
@@ -438,7 +438,9 @@
void
Buffer::AddAtEnd (const Buffer &o)
{
- if (m_end == m_zeroAreaEnd &&
+ if (m_data->m_count == 1 &&
+ m_end == m_zeroAreaEnd &&
+ m_end == m_data->m_dirtyEnd &&
o.m_start == o.m_zeroAreaStart &&
o.m_zeroAreaEnd - o.m_zeroAreaStart > 0)
{
@@ -450,6 +452,7 @@
uint32_t zeroSize = o.m_zeroAreaEnd - o.m_zeroAreaStart;
m_zeroAreaEnd += zeroSize;
m_end = m_zeroAreaEnd;
+ m_data->m_dirtyEnd = m_zeroAreaEnd;
uint32_t endData = o.m_end - o.m_zeroAreaEnd;
AddAtEnd (endData);
Buffer::Iterator dst = End ();
@@ -459,6 +462,7 @@
dst.Write (src, o.End ());
return;
}
+
Buffer dst = CreateFullCopy ();
Buffer src = o.CreateFullCopy ();
--- a/src/common/packet-metadata-test.cc Thu May 08 12:40:44 2008 -0700
+++ b/src/common/packet-metadata-test.cc Thu May 15 09:49:04 2008 -0700
@@ -613,6 +613,17 @@
p = Create<Packet> (16383);
p = Create<Packet> (16384);
+
+ // bug 179.
+ p = Create<Packet> (40);
+ p2 = p->CreateFragment (5, 5);
+ p3 = p->CreateFragment (10, 30);
+ ADD_HEADER (p2, 8);
+ ADD_HEADER (p3, 8);
+ REM_HEADER (p2, 8);
+ REM_HEADER (p3, 8);
+ p2->AddAtEnd (p3);
+
return ok;
}