From ffbe05e06776f7e7e7233e74578312781888a249 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Tue, 22 May 2018 13:04:59 -0400 Subject: Bug 1462912 - Fixed BufferList::Extract to handle the case where the call consumes the entirety of the BufferList. r=froydnj, a=RyanVM --- mfbt/BufferList.h | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) (limited to 'mfbt/BufferList.h') diff --git a/mfbt/BufferList.h b/mfbt/BufferList.h index aaff31454..7faf5a2ae 100644 --- a/mfbt/BufferList.h +++ b/mfbt/BufferList.h @@ -532,7 +532,14 @@ BufferList::Extract(IterImpl& aIter, size_t aSize, bool* aSuccess) mSegments[aIter.mSegment].mCapacity)); aIter.Advance(*this, aIter.RemainingInSegment()); } - MOZ_RELEASE_ASSERT(aIter.mSegment == copyStart + segmentsToCopy); + // Due to the way IterImpl works, there are two cases here: (1) if we've + // consumed the entirety of the BufferList, then the iterator is pointed at + // the end of the final segment, (2) otherwise it is pointed at the start + // of the next segment. We want to verify that we really consumed all + // |segmentsToCopy| segments. + MOZ_RELEASE_ASSERT( + (aIter.mSegment == copyStart + segmentsToCopy) || + (aIter.Done() && aIter.mSegment == copyStart + segmentsToCopy - 1)); mSegments.erase(mSegments.begin() + copyStart, mSegments.begin() + copyStart + segmentsToCopy); -- cgit v1.2.3