diff --git a/src/common/packet-metadata-test.cc b/src/common/packet-metadata-test.cc index ee217757a..f8300c697 100644 --- a/src/common/packet-metadata-test.cc +++ b/src/common/packet-metadata-test.cc @@ -767,6 +767,15 @@ PacketMetadataTest::RunTests (void) CHECK_HISTORY (p, 1, 500); p->RemoveAtEnd (10); CHECK_HISTORY (p, 1, 490); + + p = Create (500); + CHECK_HISTORY (p, 1, 500); + ADD_TRAILER (p, 10); + CHECK_HISTORY (p, 2, 500, 10); + REM_TRAILER (p, 10); + CHECK_HISTORY (p, 1, 500); + p->RemoveAtStart (10); + CHECK_HISTORY (p, 1, 490); return result; diff --git a/src/common/packet-metadata.cc b/src/common/packet-metadata.cc index 1794d3447..85f86b826 100644 --- a/src/common/packet-metadata.cc +++ b/src/common/packet-metadata.cc @@ -830,18 +830,13 @@ PacketMetadata::RemoveAtStart (uint32_t start) uint16_t written = fragment.AddBig (0xffff, fragment.m_tail, &item, &extraItem); fragment.UpdateTail (written); - current = item.next; - while (current != 0xffff) + while (current != 0xffff && current != m_tail) { + current = item.next; ReadItems (current, &item, &extraItem); written = fragment.AddBig (0xffff, fragment.m_tail, &item, &extraItem); fragment.UpdateTail (written); - if (current == m_tail) - { - break; - } - current = item.next; } *this = fragment; }